如何正确删除PHP会话?

如何正确删除PHP会话?,php,session,Php,Session,我以前使用这三行删除会话: session_start(); session_regenerate_id(); session_destroy(); session\u destroy()是关闭会话,还是必须手动关闭会话 session_start(); session_regenerate_id(); $_SESSION = array(); session_write_close(); 如果要销毁会话,则实际上不需要执行会话_write _close(),如手册中所述: 会话数据通常在脚

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

session_start();
session_regenerate_id();
session_destroy();
session\u destroy()
是关闭会话,还是必须手动关闭会话

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

如果要销毁会话,则实际上不需要执行会话_write _close(),如手册中所述:

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


session\u destroy
删除存储在介质(文件、数据库等)中的会话数据,但不删除
$\u session
数组或cookie,您必须手动执行,其中包括
PHPSESSID
cookie

我通常会用如下方式删除会话:

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


顺便说一句,当你调用
session\u regenerate\u id()
时,会话的文件会复制到新文件中,但旧文件不会被删除,如果你想删除旧数据会话的文件(可能是你想要的),你必须用
session\u regenerate\u id(TRUE)
指定它,删除每个cookie听起来有点危险,例如,如果您在当前域的其他web应用程序中使用cookie。您只需要删除保存会话的cookie:
setcookie(会话名称(),“”,0);取消设置($_COOKIE[session_name()])