【问题标题】:Destroy CakePHP session when close browser关闭浏览器时销毁 CakePHP 会话
【发布时间】:2010-10-28 15:48:15
【问题描述】:

出于 Ajax 的原因,我需要将 Security.level 设置为中等。 但我希望如果用户关闭浏览器,他的会话将被破坏。 我该怎么做?

提前致谢!

【问题讨论】:

  • 你不要说你是用php cake还是数据库会话。

标签: session cakephp browser


【解决方案1】:

配置/core.php

Configure::write('Session', array(
    'defaults' => 'php',
    'cookieTimeout' => 0,   //Lives until the browser is closed.
    'checkAgent'  => false  //To fix a little the Chrome Frame problem
));

【讨论】:

  • 没关系,但最好告诉他如何销毁它,而不是一开始就让它暂时消失。
  • 为什么这只是“好的”?我认为这是解决方案,因为它只会破坏身份验证 cookie,从而破坏您的会话。手动销毁它需要一个额外的依赖于 JS 的 ajax 调用,并不是每个用户都打开了它。所以这不可靠。
  • Configure::write('Session', array( 'defaults' => 'php', 'timeout' => 1440, // 会话将在 30 分钟不活动后超时 'cookieTimeout' = > 1440, // 会话 cookie 最多存在 24 小时,这不会影响会话超时 'checkAgent' => false, // 'autoRegenerate' => false, // 导致会话过期时间在每个页面上重置加载 )); //也评论这一行它完美地工作'autoRegenerate'
【解决方案2】:

除非您要持久化会话数据(即:将会话数据存储在具有未来到期日期的 cookie 中),否则应在用户关闭浏览器时销毁会话。

很遗憾,我不熟悉 CakePHP 框架,因此无法评论它的 API。但是,如果您想显式结束会话,可以在 PHP 中使用session_destroy() 来完成。

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    当页面关闭时,您可以使用 JS 删除会话 cookie(请记住:当用户刚刚离开时也会触发页面关闭 - 可能只是到您的下一页)。

    【讨论】:

      【解决方案4】:

      我猜你可以在页面卸载时触发 ajax 命令来调用 session_destroy()

      【讨论】:

      • 浏览器崩溃了怎么办?我会反其道而行之:每隔几秒钟将 ajax 发布到一个 url。如果这种情况不再发生,则用户不再“在网站上”。
      【解决方案5】:

      http://book.cakephp.org/view/1317/destroy 用于 CakePHP - 但是,CakePHP 确实设置了一个适当的会话 cookie,该会话 cookie 在浏览器关闭时被删除。

      您真正关心的可能是会话劫持 - 因此您确实希望在站点关闭时进行某种注销。你不能这样做 - 我所知道的最好的替代方法是:

      • 带有“你在吗?”的短暂会话超时AJAX 刷新 - 现在可以使用 Configure::write('Session.timeout', $seconds); 独立于安全级别控制超时,对于中等安全级别,超时秒数乘以 100。银行使用此方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-13
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        相关资源
        最近更新 更多