如何正确删除PHP会话?

时间:2011-03-21 17:23:34

标签: php session

我之前使用这三行来删除会话:

session_start();
session_regenerate_id();
session_destroy();

session_destroy()关闭会话,还是必须手动关闭会话?

session_start();
session_regenerate_id();
$_SESSION = array();
session_write_close();

2 个答案:

答案 0 :(得分:6)

session_destroy删除存储在媒体(文件,数据库等)中的会话数据,但不删除$_SESSION数组或cookie,你必须手动执行,包含PHPSESSID Cookie。

我通常会删除类似这样的会话:

foreach($_SESSION as $key => $val)
    unset($_SESSION[$key]);
foreach($_COOKIE as $key => $val)
    setcookie($key, '', 1);
session_destroy();


BTW当您调用session_regenerate_id()会话的文件被复制到新文件但旧的文件未被删除时,如果要删除旧数据会话的文件(可能是您想要的),则必须使用{{1}指定它}}

答案 1 :(得分:1)

如果您正在销毁会话,那么就不需要session_write_close(),就像在手册中它执行以下操作一样:

  

会话数据通常在脚本终止后存储,无需调用session_write_close(),但由于会话数据被锁定以防止并发写入,因此任何时候只有一个脚本可以对会话进行操作。