【发布时间】:2012-03-20 23:39:48
【问题描述】:
我有一个 Symfony2 项目,在每个会话开始时,我在服务器上创建一个文件夹,用户可以在其中操作和放置他的文件。
我希望能够在用户关闭浏览器时删除用户的文件夹 (或任何其他相关事件,也许检查会话超时?)。
我怎样才能做到这一点?
PS:我在某处读到 java 有一个 sessionHandler,你可以在其中编写你的函数。
php(特别是 Symfony2)中是否有类似的东西?
【问题讨论】:
我有一个 Symfony2 项目,在每个会话开始时,我在服务器上创建一个文件夹,用户可以在其中操作和放置他的文件。
我希望能够在用户关闭浏览器时删除用户的文件夹 (或任何其他相关事件,也许检查会话超时?)。
我怎样才能做到这一点?
PS:我在某处读到 java 有一个 sessionHandler,你可以在其中编写你的函数。
php(特别是 Symfony2)中是否有类似的东西?
【问题讨论】:
首先,您无法识别浏览器是否被 HTML 和 PHP 关闭。您将需要 ajax 和持续轮询或某种东西来知道浏览器仍然存在。可能,但有点复杂,主要是因为如果浏览器仍然存在(会话有效)但几分钟没有互联网连接(笔记本电脑、糟糕的 wlan 等),您可能会遇到麻烦。
您不能在 PHP 中使用 sessionHandler 为您执行此操作,因为当从您的服务器检索脚本时会执行 PHP。执行完最后一行后,它会停止。如果没有人再次检索脚本,它应该怎么做?没有魔法可以重新启动脚本以检查会话是否仍然存在。
那么,该怎么办?首先,您希望通过使用数据库会话存储或类似的东西使会话可见。然后,您需要一个 cronjob 启动脚本,查找所有会话并确定现在哪个会话无效,然后对其执行某些操作(例如删除文件夹)。 Symfony 可以提供帮助,因为它允许您以将会话存储在数据库中的方式配置会话管理(参见 here)以及创建可以通过 crontab 执行的任务(参见 here)。
逻辑部分,其中包含决定哪个会话无效以及如何处理这些会话)是您的部分。但这应该不是很难,因为您在数据库中获得了会话时间和值。
【讨论】: