【问题标题】:on session end event在会话结束事件上
【发布时间】:2012-03-20 23:39:48
【问题描述】:

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

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

我怎样才能做到这一点?

PS:我在某处读到 java 有一个 sessionHandler,你可以在其中编写你的函数。

php(特别是 Symfony2)中是否有类似的东西?

【问题讨论】:

    标签: php session symfony


    【解决方案1】:

    首先,您无法识别浏览器是否被 HTML 和 PHP 关闭。您将需要 ajax 和持续轮询或某种东西来知道浏览器仍然存在。可能,但有点复杂,主要是因为如果浏览器仍然存在(会话有效)但几分钟没有互联网连接(笔记本电脑、糟糕的 wlan 等),您可能会遇到麻烦。

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

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

    逻辑部分,其中包含决定哪个会话无效以及如何处理这些会话)是您的部分。但这应该不是很难,因为您在数据库中获得了会话时间和值。

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      相关资源
      最近更新 更多