我正在构建一个Session类,并且想知道如何处理数据库中过期的会话。我正在考虑抛出一个随机数,例如1到1000之间,如果它是1,那么我删除所有过期的会话。
我想这会比读取数据库中的文件或其他表更快,以检查是否必须删除过期的会话。但是,当我有很多访问时,我不确定这是否会正常工作。我可以增加随机数的范围,但是根据随机性我感觉不太好,所以我不确定这是否可行。
cron确实会更好,但我希望它能够自动充足。
答案 0 :(得分:1)
不要随机使用。最好使用cron作业。
如果您使用随机或任何存储的值在常规请求中执行此操作,则会产生清除该请求中的会话的开销。因此,您的访客可能会突然遇到延迟。
如果你仍然需要这样,仍然不要随意使用。将最后的清理时间写入数据库并阅读它以检查是否是下次清理的时间。毕竟,每个请求可能都需要一些数据库交互,因此从需要只有一行和一列的表中检索日期值的单个查询不会有任何区别。如果并非所有请求都需要数据库,则可以将此检查限制为仅执行那些请求。
但正如我所说:宁可不要只使用cron工作。
答案 1 :(得分:1)
我有类似的问题,我不想/不能使用cron作业。我的解决方案是创建一个新的PHP页面来进行会话清理。
当用户访问该站点并且是时候清除会话cookie时,会向该页面发出AJAX请求。这样,用户不会遇到任何延迟。
但是,为了确保安全,您需要为每个清洁页面调用存储一次性使用的SID。