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

标签 php mysql race-condition

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

最佳答案

一种解决方案是向数据库中的表添加两列。一列是 session ID 或用户 ID 或任何被提供房间的用户。第二列是一个时间戳,指示该优惠何时到期。

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

您经常在旅游网站和购票网站上看到类似这样的内容:“我们将为您再保留这些座位 14 分钟。请在那时完成交易,否则它将被释放等等。” "

关于php - 如何防止在线酒店预订中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58932627/

相关文章:

ruby 简单的竞争条件问题

javascript - 如何隐藏div

PHP,从mysql加载时间戳并转换为时间前字符串

c++ - 与 std::future::unwrap 竞争异常传播

c# - parallel.foreach 有效,但为什么呢?

php - 重置 PDO 中的光标位置

javascript - 如何从 PHP 文件 Jquery 中获取值?

php - 编码Json请求的问题

mysql - 我的表最后一次更改是什么时候?

mysql - 如何在 MySQL 中使用日期获取月份