在预订应用程序中保存房间


Saving rooms in booking app

我有一些酒店预订网站。符合条件的人可以选择酒店、日期和容量并支付订单费用。

当客户做出决定并点击订单按钮时,需要执行几个步骤:

  1. 再次应用程序检查价格和收集订单信息

  2. 为客户节省房间以防止超售

  3. 客户端订单窗口的计时器设置为5分钟(如果时间已过,房间将被释放)

如果客户端离开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请求以更新/检查计时器

问题1:

这个逻辑依赖于onbeforeunload()函数,但如果该函数在某些浏览器中不起作用,我们就会遇到问题。当用户离开订单页面时,是否有更好的方法触发timer_null()?也许用PHP?

问题2:

当CCD_ 6触发并且用户点击"0"时;停留在页面上";,timer_null()仍被触发。这有什么关系吗?

谢谢

一个更好的选择是在后端给订单一个到期值。这样可以避免触发、用户不使用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)

它应该适用于任何可查询的数据存储。