我有一些酒店预订网站。 符合条件的人可以选择酒店,日期和容量并支付订单费用。
当客户做出决定并点击订单按钮几步后:
应用程序再次检查价格和收集订单信息
为客户节省空间以防止超量预订
如果客户端退出orger页面,则会对null_timer进行三角处理 保存的房间已经发布
如果客户开始订单(在订单页面中),他无法获得其他订单 订单
$_SESSION['order_iddle']
和计时器更改已触发
客户端通过ajax JS触发器
window.onbeforeunload = function(){
timer_null();
return "";
}
PHP检查
if ((!isset($_SESSION['order_iddle'])) || (!$_SESSION['order_iddle']) ) {
header('location: https://home-page/');
}
$_SESSION['order_iddle']
在PHP中使用计时器进行更新。timer_null()
向php发送ajax请求以更新/检查计时器这个逻辑依赖于onbeforeunload()
函数,但如果函数在某些浏览器中不起作用,我们就会遇到麻烦。如果用户离开订单页面时有更好的方法来触发timer_null()
?也许在PHP?
当onbeforeunload()
触发并且用户点击“留在页面上”时,无论如何都会触发timer_null()
。
有什么关系吗?
答案 0 :(得分:1)
更好的选择是在后端给订单一个到期值。这样就可以避免触发,用户不使用JS时出现问题,留在页面上时出现问题等。
当他们下订单时,将值设置为当前时间加上几分钟:
$order['expiry'] = time() + (5 * 60); // sets an expiry time for 5 minutes (5x60 seconds)
然后在将来的页面上检查订单是否有效:
if (time() > $order['expiry']) {
throw new Exception('This order is not valid');
}
抓住该异常并将其返回给用户,不管您喜欢。
您的用例中可能还有其他内容,例如,需要在五分钟内保留库存。但是,如果您将此到期时间合并到数据存储中,那么它可用于检查任何未来订单的到期日。
如果您不想在每次下订单时检查数千个可能过期的记录,您可以创建一种"清理"脚本自动运行。如果您在我建议您阅读之前没有使用过crontab
,而是设置为每天午夜使用crontab运行的脚本:
0 0 * * * php /var/www/my-clean-up-script.php
然后在脚本本身(伪代码):
$expired_orders = database_query ( GET orders FROM table WHERE expired_time < current_time)
for each $expired_orders
database_query ( DELETE order)
哪个适用于任何可查询数据存储。