在会话结束事件

时间:2012-03-02 13:05:40

标签: php session symfony

我有一个Symfony2项目,在每个会话开始时,我在服务器上创建一个文件夹,用户可以在其中操作和放置他的文件。

我希望能够在关闭浏览器时删除用户的文件夹 (或任何其他相关事件,可能会检查会话超时?)。

我怎样才能做到这一点?

PS:我已经读过某个地方,java有一个sessionHandler,你可以编写你的函数。

php中是否有类似内容(特别是Symfony2)?

1 个答案:

答案 0 :(得分:4)

首先,如果浏览器被HTML和PHP关闭,则无法识别。您需要ajax和常量轮询或某种事情才能知道浏览器仍然存在。可能,但有点复杂,主要是因为如果浏览器仍在那里(会话有效)可能会遇到麻烦但几分钟没有互联网连接(笔记本电脑,糟糕的wlan,无论如何)。

您不能拥有一个sessionHandler,它可以在PHP中为您执行此操作,因为从服务器检索脚本时会执行PHP。执行完最后一行后,它会停止。如果没有人再次检索脚本,它应该怎么做?重启脚本以检查会话是否仍在那里没有魔力。

那么,该怎么办?首先,您希望通过使用数据库会话存储或类似的方式使会话可见。然后你需要一个cronjob启动一个脚本,查找所有会话并决定现在哪一个是无效的,然后用它做一些事情(比如删除文件夹)。 Symfony可以提供帮助,因为它允许您以在数据库中存储会话的方式配置会话管理(请参阅here)以及创建可以通过crontab执行的任务(请参阅here)。

逻辑部分,包含决定哪个会话无效以及如何处理此会话)是您的一部分。但是,当你在数据库中获得会话时间和值时,它应该不会很难。