我正在构建一个web应用程序,该应用程序要求我在删除预订之前为客户保留30分钟的座位或关闭浏览器。有什么最好的办法吗?
我想在MYSQL中添加一条记录并运行cron作业,但这不会给用户提供最新的结果。有什么建议吗?
谢谢!
写一个有截止日期的记录。在编写查询时使用该截止日期。定期清理过期记录
然而,关闭浏览器更复杂且不可靠。在http中与服务器的连接是无状态的,因此你真的不知道浏览器何时关闭。您可以使用ajax定期投票,并在不再有任何投票更新时删除记录。这个问题实际上是两个问题:
- 如何清理旧记录
和
- 如何忽略过期记录
在您的预订表中添加一个expire_time
字段。您可能有一些逻辑来查看还有多少座位可用,将expire_time
添加到该逻辑中,以便忽略过期的记录。
然后编写一个定期调用的脚本或函数(cron工作,register_shutdown_handler()
也是如此)来清理过期的记录。
这样,即使您的cron由于某些原因失败或运行缓慢,您也不会意外阻塞新的预订。您甚至可以完全跳过清理步骤,让性能受到(很小的)影响。
我认为它应该由会话来解决,而不是mysql。
但是如果你坚持,你应该在每次页面点击时更新条目,你也可以做一些清理
编辑是的,当然。预订系统必须是多用户的。如果一个用户做了预订,那么另一个用户一定不能得到这个座位。
是的,简单的解决方案就是添加一个新的列,叫做reserved,它将指定保留的时间。
为什么需要cron ?
BTW:会话存储在服务器而不是客户端。cookie存储在客户端而不是服务器中