如何防止在在线酒店预订竞争条件(How to prevent race condition in o

2019-08-01 08:07发布

我写使用PHP和MySQL的宾馆预订软件。 我几乎用它做,但我遇到了一个竞争状态的问题。 例如,只有一个标准间左,当2人都选择它,它显示了提供给他们两个。 我试图通过再次检查房间时,客人点击付款前确认,但仍然有问题,修复它。 我也试图使房间状态时,谁首先点击了确认,但我无法弄清楚如何改回使用,如果客人决定不支付或只关闭浏览器挂起。 我搜索的SO答案,但我真的没有找到一个明确的答案。 提前致谢

Answer 1:

一种解决方案是两列在数据库中添加一个表。 一列是会话ID或用户ID或任何正在被提供的房间的用户。 第二列是表示当报价将过期时间戳。

然后,在你的应用程序,只能说明房有在抱柱过期的时间戳。 (这样它开始时过期设置初始时间戳为0。)当选择一个房间,再次检查柱。 如果有未到期时戳在那里,用户得到一个“对不起,你太慢了”的消息。 否则,把一个时间戳有15分钟到未来或什么的,然后继续。

你看这对旅游网站,机票,代购网站很多地方说,像“我们持有这些席位为你另外14分钟。请届时完成交易,否则将被释放等等等等等等。”



Answer 2:

我也去待处理状态。 你可以用该用户的会话ID一起保存状态,并有删除已过期与之关联的会话ID所有未决状态一个cronjob。



文章来源: How to prevent race condition in online hotel booking