2013-01-04 49 views
0

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

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

+3

您无法可靠地检测浏览器何时关闭。所有你可以做的就是确保会话cookie真正是一个'会话'cookie(例如,当浏览器退出时自动删除),这将使服务器端会话数据成为孤立/放弃。 –

+0

我的意思是会话不应该超时,直到浏览器关闭? –

+0

浏览器关闭时无法检测到。所有你可以做的就是设置php有一个足够长的超时期限,大多数人不会被它击中。例如如果您在“陈旧”会话文件上设置24小时生命周期,那么您**将获得一位使浏览器闲置24.1小时的用户。 –

回答

1

当页面或浏览器窗口关闭时,可以使用Javascript来检测。但是这不应该依赖,因为有很多方法可以让用户在没有提出任何通知(浏览器崩溃,网络或停电等)的情况下停止浏览网站。

标准答案是不要打扰这种事情 - 无论如何PHP会话有超时机制。如果用户在给定的时间段内没有加载任何页面,会话将被删除。这是标准的,你不需要担心它。您可能想要做的唯一事情是根据您希望用户如何使用网站来调整超时时间。

如果你真的以尽快为他们停止留意的用户,并确保他们仍然积极地在网站上,并终止会话,我想你做这样的事情写一个简单的Ajax平,这样页面每隔几分钟(或任何你想要的时间间隔)向服务器发送一个请求。

即使浏览器停止发送ping(这可能是因为浏览器窗口已关闭,但如果浏览器崩溃或网络连接断开,这会使会话保持活动状态,即使会话超时时间很短)或者用户拔掉电源插头等)。

这样做的缺点是,它会为您的服务器创建相当多的额外流量(并为您带来相当多的额外工作),而不是简单地让会话自行超时。

+0

这确实很有用,但我只想让会话启动,而不是超时,直到页面打开。 –

+0

SDC已经解释了为什么AJAX ping是好的,在某人关闭浏览器,会话超时或按需删除之前,您无法保留会话,您无法跟踪/确定用户是否关闭了该选项卡或浏览器绝对/微秒精度 –

0

我知道这个问题是有点老了,但因为它仍然相关,这里就是我如何做到这一点:

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

现在创建一个1x1像素的GIF图片,并上传到指定的URL。上面的代码会每10分钟加载一次,这样可以让您的会话保持活跃状态​​。

相关问题