2012-06-09 128 views
4

我有用户登录/注销应用程序: 我想销毁会话,其关闭浏览器((所有选项卡))时工作正常,IE,Firefox工作正常。 但是我想在用户关闭单个选项卡时销毁会话。 我使用:当整个浏览器进程退出当浏览器选项卡关闭时销毁会话

session_set_cookie_params(0); 
session_start(); 

回答

14

浏览器只会破坏会话cookie。没有可靠的方法来确定用户是否/何时关闭了选项卡。有一个onbeforeunload处理程序可以附加到,并希望设法做一个Ajax调用服务器说标签的关闭,但它是不可靠的。

如果用户在您的网站上打开两个或多个表格会怎么样?如果他们关闭了一个标签,那么即使用户完全打算继续使用您的网站,另一个标签也会被有效注销。

+0

但'onbeforeunload'在用户刷新页面时也工作,我想在用户关闭浏览器或关闭标签时销毁会话 –

+1

您已经详细介绍了我在完成评论之前要评论的每一点, 做得太好了。 –

+1

@beginnerwebdeveloper:就像我说的,你不可能100%可靠地做到这一点。 –

3

解决方法是用自己的方法实现会话超时。使用表示最后一个请求的时候一个简单的时间戳和每个请求更新:

你需要编写这个类似这样

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { 
    // request 30 minates ago 
    session_destroy(); 
    session_unset(); 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time 

更多的东西,你可以在这里找到它类似于你的问题Destroy or unset session when user close the browser without clicking on logout

它涵盖了您所需要的一切。

相关问题