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