2010-11-10 167 views
12

我创建了一个基于会话的简单登录页面。关闭销毁PHP会话

session_start(); 

,并加入当我关闭浏览器/页,并重新打开它,该会话的值仍然存在包含此

session_destroy(); 

现在退出页面。

我想知道如何彻底销毁页面/浏览器关闭的会话。

+0

你不需要用AJAX调用或其他方法重新发明轮子。您可以简单地使用cookie的工作内置功能。您可以告诉浏览器在非常容易关闭的情况下移除Cookie。不需要Javascript。 – 2010-11-10 16:42:21

+0

@ Chacha102:任何教程? – sikas 2010-11-10 17:14:57

+1

否 - 删除或覆盖会话cookie是故事的一部分 - 但数据仍然可以在服务器上使用 - 实际上您应该覆盖会话数据($ _SESSION = array();) - 这样可以避免LOT的并发症 – symcbean 2010-11-10 17:28:40

回答

24

如果你使用:当浏览器关闭

session_set_cookie_params(0); 
session_start(); 

你的会话cookie会破坏...所以你的会议将是很好的,直到他们关闭浏览器。 IE浏览器。你登录,你登录,您关闭浏览器,重新打开它,去到现场再次,你不会在登录

+4

它不工作...我的网页仍然被打开不知道为什么我已经把相同的代码放在我的登录页面和模板标题页面,但它没有被破坏 – Vivek 2014-03-06 17:59:23

+0

不在这里工作 – Kreker 2014-07-02 09:49:59

+3

也没有为我工作,但找到了(我)的理由:关闭后,Firefox被阻止记住这些标签,并且此功能可以防止会话被破坏。详情在这里:https://support.mozilla.org/de/questions/975670 – user2345998 2015-07-02 12:25:31

5

您将只能检测浏览器窗口是否已使用JavaScript关闭,此时您可能会触发Ajax请求以执行注销操作。

+3

尽管投票表决此方法将工作,JS是唯一的方式,您可以检测浏览器窗口是否关闭。 'session_set_cookie_params(0)'会将cookie存储在用户内存中而不是磁盘上,但是当浏览器窗口关闭时它不会反馈给服务器。 Cookie将随用户浏览器而死。 – Treffynnon 2010-11-10 16:46:55

+0

我没有投票!但有没有关于这个的任何教程? – sikas 2010-11-10 17:15:56

+0

这可能会工作,但我恕我直言,有可能在关闭标签页/浏览器期间ajax将被终止/中止的情况。因为当你打开一个包含ajax的页面,并且“真正的快速”(在文档准备好之后),点击某个链接,当新页面打开时,ajax会显示错误。谢谢 – dav 2014-07-12 17:07:34

-1

删除会话变量 - session_unset()。

销毁会话 - session_destroy();

session_unset(); 
session_destroy(); 
+0

请完整阅读OP的要求。 PHP无法知道浏览器什么时候关闭,特别是没有这两条线。 – 2016-03-25 18:36:03

0

服务器无法检测到浏览器或选项卡已关闭,您可以使用Javascript或Ajax,但对不起,我对此不了解。

我的建议是使用会话超时,所以如果没有来自用户的操作,会话将被销毁。这是一个例子:

// destroy every 2 minutes 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) { 
    // last request was more than 2 minutes ago 
    session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

// end of code 

希望这有助于你

0

如果存在会话,通过破坏会话,将用户重定向到主页登出。临时cookie被用来存储会话标识。这个cookie也被破坏了。

<?php 
    // This is the logout page for the site. 
    session_start();//access the current session. 
    //if no session variable then redirect the user 
    if (!isset($_SESSION['user_id'])) { 
    header("location:index.php"); 
    exit(); 
    }else{ //cancel the session 
     $_SESSION = array(); // Destroy the variables 
     session_destroy(); // Destroy the session 
     setcookie('PHPSESSID', ", time()-3600,'/', ", 0, 0);//Destroy the cookie 
     header("location:index.php"); 
     exit(); 
    } 
    ?>