因此,假设用户在我的网站上做了一些事情,例如上传了一些图片或其他内容,他离开时没有退出,也没有回来或让我说他确实在几个月后回来了。
所以我的问题是,是否有某种方式例如在会话过期后删除他上传的文件,假设在30分钟后(请记住用户从不重新加载页面),因此需要完全运行在服务器端没有用户干扰。
编辑谢谢大家的精彩回答,它给了我很多好点子,我希望我能接受你所有的答案:)
答案 0 :(得分:6)
好问题!我的第一个想法是使用基于数据库的解决方案。如果您还没有,则会跟踪表sessions
中的所有活动会话,其中包含您可能需要的其他内容session_id
和last_visited_time
。每次用户访问您的网站时,此条目都会更新:
UPDATE sessions WHERE session_id = "<current session id>" SET last_visited_time = NOW()
该机制的第二部分是一个cronjob,它扫描sessions
表中最近没有更新last_visisted_time
的会话(在你想要的任何时间间隔内)并删除该会话的文件。
答案 1 :(得分:4)
一种方法是致电
$thePath = session_save_path();
并迭代所有保存的会话文件,对每个文件进行反序列化并检查它们是否有指定的超时属性。
不幸的是,您需要扫描整个目录以查找所有会话文件,这些文件早于定义的时间段。您可以使用start()
来确定会话文件的年龄。
在维护良好的服务器上,每个虚拟主机的会话数据应该有一个单独的目录。维护得不太好可能会将所有会话存储在统一的共享目录中。因此,请确保您不读取或删除其他虚拟主机的会话数据。
因此我建议将会话数据保存到应用程序的后端数据库。使用SQL,找到所有过时的会话文件将是微不足道的。
session_set_save_handler()
的文档提供了一个示例,explains this whole process很好地基于对象。
答案 2 :(得分:1)
我喜欢上面的所有答案,但另一种解决方案是以您知道它们是“临时”的方式命名上传的文件,例如在时间戳前添加其名称。这样,定期进程会清除所有这样的文件,除非你的程序决定应该保留它们,相应地重命名它们。