【问题标题】:Force users to logout when they leave my php website?当用户离开我的 php 网站时强制用户注销?
【发布时间】:2011-01-31 10:28:07
【问题描述】:

在我的 php 应用程序中,我使用 $_SESSION 来跟踪用户是否已登录。如果用户在我的网站上离开http://mysite.com 的任何页面并转到http://someotherwebsite.com,我想自动将其注销,这样如果他们返回http://mysite.com上的任何页面,他们都需要重新登录。

有没有简单的方法可以做到这一点?

【问题讨论】:

  • someotherwebsite.com 链接在您的网站上。
  • 不。用户可能在浏览器的地址栏中输入了它。
  • 正如其他人所说,您可以做一些事情。您可以让会话过期,可以使用 onbeforeunload,并且可以在您的页面上单击指向外部站点的链接时使会话过期。为什么不三个都做?

标签: php logout


【解决方案1】:

您无法明确告知用户何时离开您的网站,最好的办法是对会话实施超时。

正如大多数答案所说,您可以检查 JavaScript 事件 onbeforeunload,但用户可以通过禁用 JavaScript 或 BalusC had pointed out 使用网络浏览器来绕过它不支持的,比如 Opera。

因此,我坚信对会话实施超时是强制注销的最佳方式。

【讨论】:

  • ..或使用不支持它的网络浏览器,如 Opera。
  • 谢谢 BalusC,如果可以的话,我将其添加到我的回答中,感谢您。
【解决方案2】:

实现这一点的第二个想法是在会话上设置一个极低的超时时间(例如 90 秒),并在您服务的每个页面上放置一个 iframe。然后,该 iframe 将每 60 秒调用一次该页面。

这在没有 JavaScript 的情况下也可以工作,但可能会在旧版本的 Internet Explorer 中产生烦人的点击噪音(我不知道是在 6 还是 7 中停止的?)

【讨论】:

    【解决方案3】:

    不幸的是,不是真的, 这是 Web 应用程序的大问题之一。您的应用程序无法知道浏览器已移至其他网站。

    正如 ChristohpeD 所提到的,您可以设置会话超时。 请记住,您的网站只会刷新服务器收到帖子或某种 javascript ping 的时间。

    希望有帮助

    【讨论】:

      【解决方案4】:

      除了为您的会话设置超时 - 不是真的。想到的唯一方法是当用户离开当前页面时触发的onbeforeunload JavaScript 事件,但该事件不知道用户要去哪里。但是,如果您真的想要这样做,也许可以根据以下 hacky 解决方法(未经测试)构建一些东西:

      • 设置一个 onbeforeunload 事件,将 AJAX 调用发送到您的服务器。 (如何成功地做到这一点 - 所以在页面关闭之前调用通过 - 本身就是一个问题,在 SO 上搜索“onbeforeunload ajax”应该会产生一些结果。

      • Ajax 调用将开始倒计时,表示此用户的会话即将结束,例如 15 秒。

      • 如果用户要离开您的网站,则会应用倒计时。

      • 如果用户要转到您网站上的其他页面,则在提供下一页时,您会清除所有“死亡”倒计时。

      这可能是不稳定的,因为在下一页已经消除该倒计时之后,Ajax 请求开始倒计时到达服务器可能会发生这种情况。但如果你真的需要这样做,这可能是一个方向。当然,仅适用于启用 JS 的用户。

      【讨论】:

        【解决方案5】:

        您可以在 onbeforeunload 事件中对将终止会话的某些服务器端脚本执行 AJAX 调用。

        【讨论】:

        • 如果用户关闭了 JavaScript,这还有用吗?
        【解决方案6】:

        根据我对 PHP 的了解(这并不多),您的应用程序会知道他们离开了网站吗?如果您访问 someotherwebsite.com,您的代码在返回之前不会再次调用。

        【讨论】:

          【解决方案7】:

          您不能(但您的会话会在一段时间后自动超时;因此您可以将超时设置为较短的时间)。

          【讨论】:

            猜你喜欢
            • 2011-07-26
            • 1970-01-01
            • 2012-05-11
            • 1970-01-01
            • 2018-11-17
            • 1970-01-01
            • 1970-01-01
            • 2012-11-19
            • 2014-05-25
            相关资源
            最近更新 更多