【问题标题】:How to delete session when user leaves page?用户离开页面时如何删除会话?
【发布时间】:2020-05-03 17:31:08
【问题描述】:

我有一个只有一页的小型聊天网站。当用户登录时,我将所有数据保存在会话中。当用户通过注销按钮注销时,会话被删除。但是如果用户关闭页面并在 5 分钟后返回,他仍然处于登录状态,因此会话仍然处于活动状态,我不希望这样。

【问题讨论】:

  • 确定会话在到期前将持续多长时间,并为其添加时间戳,然后使用该时间戳作为查询的一部分来确定用户是否仍有活跃的聊天。
  • 这能回答你的问题吗? How do I expire a PHP session after 30 minutes?
  • 欢迎来到 Stack Overflow!如果使用 Sessions:需要在浏览器上处理 cookie,在 PHP 端处理 session,强烈推荐使用 JWT(JSON Web Token)

标签: javascript php jquery ajax


【解决方案1】:

现代浏览器中有一个信标请求,当标签/窗口将要关闭时发送请求并保证其交付(不会被取消)。

在它的帮助下,您可以发送终止会话的请求。

您可以在此处阅读更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API/Using_the_Beacon_API

window.onunload = function analytics(event) {
  if (!navigator.sendBeacon) return;

  var url = "https://example.com/analytics";
  // Create the data to send
  var data = "state=" + event.type + "&location=" + location.href;

  // Send the beacon
  var status = navigator.sendBeacon(url, data);

  // Log the data and result
  console.log("sendBeacon: URL = ", url, "; data = ", data, "; status = ", status);
};

一个通常的实现 - 每 N 秒发送一个 ping 请求并存储会话中最后一个请求的时间戳。 当会话开始使用当前时间戳检查其时间戳并取消设置当前会话的变量时,如果它的差异超过 2-3 个时间范围。

【讨论】:

    【解决方案2】:

    以下是您问题的一些答案:

    Unset Session When browser tab is closed

    PHP - Session destroy after closing browser

    但是您可以向服务器发送频繁的 ajax 请求以保持会话,如果 10 秒内没有 ajax 请求,则取消设置会话

    setInterval(() => {
        // ajax requset
    }, 1000)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2013-08-03
      • 2011-09-19
      • 2013-08-02
      相关资源
      最近更新 更多