离开网站时结束会话


End session when website is left

我正在尝试创建一个网站,只要您留在网站中,您就可以通过 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"}
        });
    });

不可能检测用户是否离开了您的网站(想象一下用户刚刚断开与互联网的连接,但浏览器仍然打开,或通过 KILL 关闭浏览器的情况(,所以基本上你不能做你想做的事。

无论如何,这里有一些线索:

  1. 你为什么需要它?目标是什么?尝试重新思考您的架构。
  2. 您可以将session.cookie_lifetime配置为 0,这意味着"直到浏览器关闭">
  3. 您可以在每个页面上添加一些javascript"ping",例如,它将每10秒调用一次您的脚本,或者在互联网关闭时停止调用,用户转到另一个站点并且其他选项卡中没有页面,然后您将需要单独的cron作业,这将破坏上次没有ping的用户的会话

一个简单的解决方案是

a( 在服务器端 - 如果存在会话,则在用户上次访问页面时从数据库(在服务器上(检索。如果太久以前让他们再次登录。否则,交付页面并取消数据库的日期b( 为了获得更好的用户体验,请使用 Javascript 更新页面 (setTimeout(。

如果(b(不起作用(即出于任何原因(,那么至少服务器与个人数据一起受到保护