PHP在会话过期时执行某些操作

Lin*_*nas 11 php

因此,假设用户在我的网站上做了一些事情,例如上传了一些图片或其他什么,他离开时没有退出,也没有回来,或者让我说他确实在几个月后回来了.

所以我的问题是,是否有某种方式例如在会话过期后删除他上传的文件,假设在30分钟后(请记住用户从不重新加载页面),因此需要完全在服务器端运行没有用户干扰.

编辑谢谢大家的精彩答案,它给了我很多好点子,我希望我能接受你所有的答案:)

fre*_*oma 6

好问题!我的第一个想法是使用基于数据库的解决方案.如果您还没有,那么您将跟踪表格中的所有活动会话,sessions其中包含您可能需要的其他内容session_idlast_visited_time.每次用户访问您的网站时,此条目都会更新:

UPDATE sessions WHERE session_id = "<current session id>" SET last_visited_time = NOW()
Run Code Online (Sandbox Code Playgroud)

该机制的第二部分是一个cronjob,它扫描sessions表中last_visisted_time最近没有更新的会话(在你想要的任何时间间隔内)并删除该会话的文件.


Ste*_*eAp 4

一种方法是打电话

  $thePath = session_save_path();
Run Code Online (Sandbox Code Playgroud)

并迭代所有保存的会话文件,反序列化每个文件并检查它们的指定超时属性。

不幸的是,您需要扫描整个目录才能找到所有早于定义时间段的会话文件。您可以用来start()计算会话文件的年龄。

在维护良好的服务器上,每个虚拟主机都应该有一个单独的目录来存放其会话数据。维护得不太好的可能会将所有会话存储在统一的共享目录中。因此,请确保您不要读取或删除其他虚拟主机的会话数据。

使用数据库的更好方法

因此我建议将会话数据保存到应用程序的后端数据库中。使用 SQL,查找所有过时的会话文件将是微不足道的。

的文档session_set_save_handler()提供了一个示例,它基于对象很好地解释了整个过程。