我有用户登录/注销应用程序: 我想销毁会话,其关闭浏览器((所有选项卡))时工作正常,IE,Firefox工作正常。 但是我想在用户关闭单个选项卡时销毁会话。 我使用:当整个浏览器进程退出当浏览器选项卡关闭时销毁会话
session_set_cookie_params(0);
session_start();
我有用户登录/注销应用程序: 我想销毁会话,其关闭浏览器((所有选项卡))时工作正常,IE,Firefox工作正常。 但是我想在用户关闭单个选项卡时销毁会话。 我使用:当整个浏览器进程退出当浏览器选项卡关闭时销毁会话
session_set_cookie_params(0);
session_start();
浏览器只会破坏会话cookie。没有可靠的方法来确定用户是否/何时关闭了选项卡。有一个onbeforeunload
处理程序可以附加到,并希望设法做一个Ajax调用服务器说标签的关闭,但它是不可靠的。
如果用户在您的网站上打开两个或多个表格会怎么样?如果他们关闭了一个标签,那么即使用户完全打算继续使用您的网站,另一个标签也会被有效注销。
解决方法是用自己的方法实现会话超时。使用表示最后一个请求的时候一个简单的时间戳和每个请求更新:
你需要编写这个类似这样
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。
它涵盖了您所需要的一切。
但'onbeforeunload'在用户刷新页面时也工作,我想在用户关闭浏览器或关闭标签时销毁会话 –
您已经详细介绍了我在完成评论之前要评论的每一点, 做得太好了。 –
@beginnerwebdeveloper:就像我说的,你不可能100%可靠地做到这一点。 –