PHP会话到期时运行脚本

时间:2011-12-07 13:35:04

标签: php session e-commerce

我有一个带有数量1的独特商品的购物车应用程序 - 当用户将其中一个放入购物篮时我需要耗尽库存数量,以避免其他人购买它。问题是,如果他们在没有购买的情况下放弃购物车,我需要将物品放回库存中。

有没有办法在购物车会议到期时补充库存?即运行脚本来替换股票。

3 个答案:

答案 0 :(得分:4)

您可以使用session_set_save_handler创建自定义会话处理类。 执行此操作时,您可以决定在调用垃圾收集器时或在会话销毁时需要运行的其他操作。如果您决定使用垃圾收集器,请确保您也知道session.gc_divisorsession.gc_probability的值,并了解它们的作用(这些设置了垃圾收集器运行的概率)。

答案 1 :(得分:2)

避免需要cron工作;保持简单:

  1. 用户选择将对象放入他/她的篮子
  2. “将对象置于篮子中”的时间戳存储在数据库中,并且也存储超时时间戳。例如(time() + (60*20))
  3. 用户关闭网页
  4. 在每个页面加载中,您执行一个简单的mysql查询来检查timeout-timestamps是否小于当前时间戳。如果查询返回结果,请从购物篮中删除并放回插槽。
  5. (这要求您更新数据库中的某种“最后活动”)

    应该非常直接。

答案 2 :(得分:0)

创建数据库表以跟踪会话活动,例如sessions。在其中,至少放置字段session_id和名为last_activity的DATETIME或TIME字段。

如果您还没有,请创建一个carts表格,其中包含购物车的内容(例如product_idquantity),并且链接指向{{ 1}}。然后,有两种情况:

  1. 用户完成订单,只需“擦除”属于其会话的session_id表格中的行。
  2. 用户放弃购物车,拨打cronjob,检查carts值是否超出您想要的值(比如说,超过一小时前)。使该脚本使用购物车中的数量重新计算您的供应量。
  3. 请注意,您需要更新引导程序/加载程序中的last_activity字段(在每个加载的页面上触发的机制)。