如何防止在线酒店预订中的竞争条件

时间:2012-10-11 05:06:44

标签: php mysql race-condition

我正在使用PHP和MySQL编写酒店预订软件。我已经完成了它,但我遇到了竞争条件问题。例如,只剩下一个标准房间,当2位客人都选择它时,它显示两者均可用。我尝试通过在客人点击确认之前再次检查房间来修复它,但仍有问题。我还尝试将房间状态设置为待处理,无论谁先点击确认,但如果客人决定不支付或只是关闭浏览器,我无法弄清楚如何将其更改回可用状态。我搜索了SO的答案,但我没有找到明确的答案。提前致谢

2 个答案:

答案 0 :(得分:11)

一种解决方案是向数据库中的表添加两列。一列是会话ID或用户ID或者为房间提供的任何用户。第二列是时间戳,指示该要约何时到期。

然后,在您的应用中,仅显示保留列中已过期时间戳的会议室。 (将初始时间戳设置为0,使其开始过期。)选择房间后,再次检查该列。如果那里有未到期的时间戳,则用户会收到“抱歉,你太慢”的消息。否则,将时间戳放在未来15分钟或其他任何地方,然后继续。

你在旅游网站和购票网站上看到了很多这样的地方,它说的是“我们将为你再持有这些座位14分钟。请完成交易,否则它将被释放等等等等。 “

答案 1 :(得分:1)

我也会处于待定状态。您可以将状态与此用户的会话ID一起保存,并使用cronjob删除与其关联的会话ID已过期的所有待处理状态。