【问题标题】:Keep session as long as browser is open只要浏览器打开就保持会话
【发布时间】:2015-02-22 08:41:19
【问题描述】:

我有一个保持会话跟踪的 PHP 应用程序。我希望应用程序保持用户会话,直到他关闭浏览器。在浏览器关闭之前,会话不应过期。我是一名 Java 开发人员,我是 PHP 新手。

在浏览器关闭之前会话不应超时。无论如何,一旦浏览器关闭,会话将在一段时间后超时。

【问题讨论】:

  • 您无法可靠地检测到浏览器何时关闭。您所能做的就是确保会话 cookie 确实是一个“会话”cookie(例如,当浏览器退出时自动删除),这将使服务器端会话数据成为孤立/放弃。
  • 我的意思是会话不应该在浏览器关闭之前超时?
  • 您无法检测到浏览器何时关闭。您所能做的就是将 php 设置为具有足够长的超时时间,以使大多数人不会受到它的影响。例如如果您为“陈旧”会话文件设置 24 小时的生命周期,您获得一个让浏览器闲置 24.1 小时的用户。

标签: php session


【解决方案1】:

可以使用 Javascript 来检测页面或浏览器窗口何时关闭。然而,这不应该被依赖,因为有很多方法可以让用户停止浏览网站而不会发出通知(浏览器崩溃、网络或断电等)。

标准的答案是不要理会这种事情——无论如何,PHP 会话都有超时机制。如果用户在给定时间段内没有加载任何页面,则会话将被删除。这是标准的,您不必担心。您唯一想做的就是根据您希望用户使用网站的方式调整超时持续时间。

如果您真的想要关注用户并确保他们仍然活跃在网站上,并在他们停止后立即终止会话,我猜你会做一些类似 write一个简单的 Ajax ping,以便页面每隔几分钟(或您想要的任何间隔)向服务器发送一次请求。

这将使会话保持活动状态,即使会话超时相当短,直到浏览器停止发送 ping(这可能是因为浏览器窗口已关闭,也可能是浏览器崩溃或网络连接中断,或用户拔掉电源插头等)。

这样做的不利方面是,它会为您的服务器带来大量额外流量(并为您带来大量额外工作),与简单地让会话自行超时相比并没有真正的好处。

【讨论】:

  • 这确实很有用,但我只是希望会话启动并且在页面打开之前不会超时。
  • SDC 已经解释了为什么 AJAX ping 是好的,在有人关闭浏览器、会话超时或按需删除之前,您无法保持会话,您无法跟踪/确定是否用户以绝对/微秒精度关闭选项卡或浏览器
【解决方案2】:

我知道这个问题有点老了,但因为它仍然相关,所以我是这样做的:

function keepMeAlive() {
    var img = new Image();
    img.src = YOUR_URL + 'images/empty.gif?' + new Date().getTime();
}
window.setInterval(keepMeAlive, 600000);

现在创建一个 1x1 像素的 gif 图像并将其上传到指定的 URL。上面的代码将每 10 分钟加载一次,从而使您的会话保持活动状态。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2019-04-12
    • 2011-12-17
    • 2012-04-11
    相关资源
    最近更新 更多