更具体地说,如果客户将商品添加到他们的购物车,他/她添加的商品数量将从数据库中的可用数量中扣除。但是,如果他们完全离开网站怎么办?我被建议为此用户的会话添加时间戳,并更新每个请求的时间戳。当他们离开网站时,将不再有更新的请求。 (所选项目存储在用户会话中)
在PHP中,我如何检查特定用户的会话以查看自上次请求以来已经过了多长时间?我的第一个想法是将用户的会话ID,时间戳和每个项目的数量存储到数据库中,然后通过脚本来检查已用时间,并相应地进行处理,但这实际上会将我的购物车变成数据库驱动的购物车。
有不同或更好的方法吗?
编辑:我为我的优柔寡断而道歉。我最终最终使用了 Marc B 的答案,虽然 Aatch 的答案也会为我完成。但是,我发现我可以访问服务器上保存会话的目录,并使用cron作业每分钟检查这些会话文件中保存的时间戳,这是我当前购物车解决方案的更顺畅的实现。答案 0 :(得分:1)
我实际上已经构建了一个非常类似的系统。不幸的是,由于您需要某种形式的服务器端计划,因此cron确实是您使用PHP的唯一途径。
至于购物车是数据库驱动的购物车,鉴于您已经将所有信息存储在数据库中,您可以将购物车和待处理信息添加到数据库中。那就是在运行查询时,您可以利用DB交易系统来确保安全。
答案 1 :(得分:1)
如果您使用的是基于标准文件的PHP会话,则可以禁用内置会话垃圾收集器并自行滚动。一个简单的基于cron的shell脚本可以扫描会话文件目录,查找在一定时间内未被更改(或触摸)的任何会话
鉴于未触及/可能过期的会话列表,您依次打开每个会话(它只是$ _SESSION超全局的serialize()
表示),寻找购物车,并修复您的数据库根据您的发现量。
答案 2 :(得分:0)
我会查看您的实际库存数量,然后从用户购物车中过去6小时(或您选择的任何时间范围)登录的商品数量中扣除该数量。如果你有一个整数列来跟踪有多少库存,当有人把它放在购物车中时可以删除一个可能有点误导和难以整理的产品。
答案 3 :(得分:0)
在我看来,你应该在他们购买物品后扣除数量,因为如果一个人将物品添加到他们的购物车并且只剩下一个物品,那么下一个人会看到没有更多物品。库存和离开,不知道实际上还有一个。它应该是先到先得。