强制用户在离开我的php网站时注销?

时间:2010-03-24 19:36:03

标签: php logout

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

有一种简单的方法吗?

7 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:2)

你可以在onbeforeunload事件中执行一个AJAX调用到一些将终止会话的服务器端脚本。

答案 2 :(得分:2)

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

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

  • Ajax调用将开始倒计时,表示此用户的会话即将死亡,比如十五秒。

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

  • 如果用户要访问您网站上的其他网页,则在提供下一页时会清除所有“模具”倒计时。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

你不能(但你的会话会在一段时间后自动超时;所以你可以将超时设置为很短的时间。)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

希望有助于