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

Raj*_*ran 35 php session

我尝试使用该session_destroy()方法销毁所有sesion变量,但在使用该方法后,不会销毁这些值.

为什么session_destroy()不工作?

有没有其他方法来破坏PHP中的会话?

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

R.D*_*.D. 94

可能为时已晚,无法做出响应,但请确保在销毁会话之前对其进行初始化.

session_start() ;
session_destroy() ;
Run Code Online (Sandbox Code Playgroud)

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

  • 不要使用`@`运算符来隐藏代码问题. (19认同)
  • 这应该是接受的答案,因为没有"session_start","session_destroy"将无法工作. (6认同)
  • @Andrew是对的.这应该是**接受的答案** (4认同)
  • 对于这个,我浪费了很多时间而没有意识到这个明显的错误...... (2认同)

And*_*rea 48

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

你可以手动清除$_SESSION你是否愿意($_SESSION = [];).

  • @Gabi,`session_unset`用于PHP3时代的全局注册事项,不应再使用了. (14认同)
  • session_destroy()不会删除会话cookie.它应该手动无效. (4认同)

kev*_*nji 15

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

$_SESSION = array();
Run Code Online (Sandbox Code Playgroud)

当然,$_SESSION一旦你打电话,你就无法访问另一个页面上的值session_destroy,所以这并不重要.

请尝试以下方法:

session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
Run Code Online (Sandbox Code Playgroud)

  • 不,您不需要调用`session_unset`。它用于 PHP3 时代的全局注册,没有人应该使用它。 (2认同)

Ali*_*sso 5

我还必须像这样删除会话 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();
Run Code Online (Sandbox Code Playgroud)

资料来源:geeksforgeeks.org