为什么PHP session_destroy()不起作用?

时间:2011-06-24 18:22:01

标签: php session

我尝试使用session_destroy()方法销毁所有会话变量,但在使用此方法后,值不会被销毁。

为什么session_destroy()无效?

还有其他方法可以在PHP中销毁会话吗?

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) 
{   
    session_destroy();   
    session_unset();     
}

10 个答案:

答案 0 :(得分:89)

回复可能为时已晚,但请确保您的会话在销毁之前已初始化。

session_start() ;
session_destroy() ;

即。如果在index.php中初始化会话,则无法在logout.php中销毁会话。您必须在销毁之前在logout.php中启动会话。

答案 1 :(得分:45)

使用session_destroy()后,会话在幕后被销毁。出于某种原因,这不会影响$_SESSION中已为此请求填充的值,但在将来的请求中它将为空。

如果您愿意($_SESSION),可以手动清除$_SESSION = [];

答案 2 :(得分:15)

如果需要清除$_SESSION的值,请将数组设置为空数组:

$_SESSION = array();

当然,在您致电$_SESSION后,您无法在其他网页上访问session_destroy的值,因此无关紧要。

尝试以下方法:

session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable

答案 3 :(得分:4)

实际上,它有效,但你还需要在session_destroy之后执行$_SESSION = array();以摆脱$ _SESSION变量。但是,请避免执行unset($_SESSION),因为这会使会话无效。

答案 4 :(得分:3)

我还必须这样删除会话Cookie:

session_start(); 
$_SESSION = []; 

// If it's desired to kill the session, also 
// delete the session cookie. 
// Note: This will destroy the session, and 
// not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
        $params["path"], $params["domain"], 
        $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy();

来源:geeksforgeeks.org

答案 5 :(得分:1)

嗯,这对我来说似乎是一个新问题,使用新的php服务器。过去从未遇到会议未结束的问题。

在会话测试中,我设置会话,运行会话计数++并关闭会话。重新加载页面,令我惊讶的是变量仍然存在。

我尝试了mc10发布的以下建议

session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable

然而,这不起作用。我认为它不会起作用,因为会话在销毁之后没有激活,所以我改掉了它。

$_SESSION = array();
session_destroy();

有效,重新加载页面,开始sessios并查看设置变量都显示为空/未设置。

真的不确定为什么session_destroy()在这个PHP版本5.3.14服务器上不起作用。

只要我知道如何清除会话,就不要在乎。

答案 6 :(得分:1)

页面加载完成后,

session_destroy()生效。所以在第二次上传时,会话终止。但是使用unset(),您也可以从页面中注销。

答案 7 :(得分:0)

如果您在127.0.0.1销毁会话,则不会影响localhost,反之亦然

答案 8 :(得分:-1)

有效,但有时 (请查看以下示例)

<?php
session_start();
$_SESSION['name']="shankar";
if(isset($_SESSION['name']))
{
    echo $_SESSION['name']; // Outputs shankar
}
session_destroy();
echo $_SESSION['name']; // Still outputs shankar

<强>奇怪!!对吗?


如何克服这个?

在上述方案中,如果您将 session_destroy(); 替换为 unset($_SESSION['name']); ,则可以按预期工作。

但我想破坏所有变量而不仅仅是一个变量!

是的,也有一个解决方案。只需取消设置 $_SESSION 数组即可。 [ Credits Ivo Pereira ]

unset($_SESSION);

答案 9 :(得分:-2)

添加session_start();之前!Doctype宣言

    <?php session_start(); ?>
    <!doctype html>
    <html>
    <body>
<?php 
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) 
{   
    session_destroy();   
    session_unset();     
} 
?>
</body>
</html>