我有一个保持会话跟踪的 PHP 应用程序。我希望应用程序保持用户会话,直到他关闭浏览器。在浏览器关闭之前,会话不应过期。我是一名 Java 开发人员,我是 PHP 新手。
在浏览器关闭之前会话不应超时。无论如何,一旦浏览器关闭,会话将在一段时间后超时。
可以使用 Javascript 来检测页面或浏览器窗口何时关闭。然而,这不应该被依赖,因为有很多方法可以让用户停止浏览网站而不会发出通知(浏览器崩溃、网络或断电等)。
标准的答案是不要打扰这种事情——无论如何,PHP 会话都有超时机制。如果用户在给定时间段内没有加载任何页面,则会话将被删除。这是标准的,您不必担心。您可能想做的唯一一件事就是根据您希望用户使用网站的方式调整超时持续时间。
如果您真的想关注用户并确保他们仍然活跃在网站上,并在他们停止时立即终止会话,我猜您会做一些类似编写简单的 Ajax ping 的操作,以便页面发送每隔几分钟(或您想要的任何时间间隔)向服务器发送一次请求。
这将使会话保持活动状态,即使会话超时相当短,直到浏览器停止发送 ping(这可能是因为浏览器窗口已关闭,但也可能是浏览器崩溃、网络连接中断或用户拉电源插头等)。
不利的一面是,它会给您的服务器带来大量额外的流量(并为您带来大量额外的工作),与简单地让会话自行超时相比没有真正的好处。
我知道这个问题有点老了,但因为它仍然相关,所以我是这样做的:
function keepMeAlive() {
var img = new Image();
img.src = YOUR_URL + 'images/empty.gif?' + new Date().getTime();
}
window.setInterval(keepMeAlive, 600000);
现在创建一个 1x1 像素的 gif 图像并将其上传到指定的 URL。上面的代码将每 10 分钟加载一次,从而使您的会话保持活动状态。