【发布时间】:2013-10-17 06:16:58
【问题描述】:
我正在尝试创建一个网站,只要您留在网站上,您将通过 php 会话保持登录状态,但如果您离开该网站,则会被注销。例如,当您从 mysite.com/index.php 移动到 mysite.com/otherpage.php 时,您将保持登录状态,但在您移动到 othersite.com 时将被注销。这可能吗?
到目前为止,我已经尝试使用 ajax 和 jquery 在页面离开时结束会话,但这也会在页面刷新时结束会话。
$(window).unload(function(){
$.ajax({
type: 'POST',
url: 'logout.php',
async:false,
data: {key_leave:"289583002"}
});
});
【问题讨论】:
-
您可以将该 ajax 调用添加到 jQuery“click”处理程序中,仅用于您网站上的所有外部链接(可能添加一个 css 类“external”)。当用户点击其他站点时,他们将首先退出您的站点。
-
添加一个心跳,只要用户在网页上,它就会定期访问您的服务器,然后如果错过其中一个或两个心跳,假设他们已经离开您的站点并结束会话。在外部链接上这样做不会有效,因为不是每个人都在每个网站上使用一个标签。例如,我可能会在三个不同的选项卡中同时打开您网站的三个不同区域。如果我离开其中一个而仍在使用其他的,则自动注销将带来不便。
-
通常这是使用具有设定持续时间的会话或 cookie 来完成的,这些持续时间会在每次心跳时重置,这样如果在设定的持续时间内没有发生心跳,会话或 cookie 就会丢失,从而导致要注销的用户。
-
@KevinB 这个概念是您在单击外部站点链接之前已登录。打开多个选项卡不会对此产生任何影响...事实上,单击一个选项卡中的外部链接会使您退出所有其他选项卡,这完全符合发帖人的要求。
-
我要说的是这样做对用户不太友好。是的,你可以这样做,它会完全满足他的要求。但我认为他没有看到这样做的真正副作用。