【发布时间】:2014-11-08 14:36:49
【问题描述】:
我查看了一些标题相似的帖子 checking status of session with session id 和 How to tell if a session is active?,但它们似乎并不特定于我想要实现的目标。
我正在构建一个购物车,无论用户是否登录,都可以在其中添加购物车 - 使用 $_SESSION 和 session_id()。
将项目添加到购物车将条目添加到具有会话 ID 的购物车表。
长话短说,我如何从会话 ID 列表中找出哪些会话是活动的,哪些不是(用于 crontab 中),以便我可以从数据库中的购物车表中删除多余的项目?
【问题讨论】:
-
您想要会话中的活动和非活动?
-
从技术上讲,我只需要知道哪些是非活动的,这样我就可以将它们从数据库中删除。
-
我不确定您是否可以在 PHP 中获得活动/过期会话的列表。但这是你可以做的:一旦购物车被初始化,将会话 ID 存储在一个表中(我猜你已经在这样做了)带有时间戳(我猜你没有在做 那个)。并且每当用户加载页面时更新时间戳(如果用户在页面上花费大量时间,您可以发送 ajax 调用以定期刷新会话)。为旧会话定义一个阈值(例如 2 小时),然后从数据库中删除早于该阈值的会话(可能使用 cron 作业)。让我知道这是否有效。
-
为什么不保存所有项目的状态?
-
或者,也许您没有有将购物车项目存储在数据库中。将购物车项目存储在会话变量中。问题就解决了。当会话死亡时,垃圾收集器会自动清理内存。它还节省了访问数据库的时间。