3

可能重复:
关闭会话并开始一个新会话

我使用 wampserver2.1 php5.3.3,我发现 session_regenerate_id(true) 在我的脚本中不起作用,文档说当我将参数 'delete_old_sessions' 设置为 true 时,应该有一个新的 sid 并且应该删除所有会话变量,但是事实上在函数之后, $_session[abc] 仍然存在。我误解了这个功能,我的问题是什么?如果有人可以帮助我,我将不胜感激

<?php
session_start();
$_SESSION['abc']=12323;
session_regenerate_id(true);
echo $_SESSION['abc'];                  
?>

我认为它应该不显示,但它输出:12323

4

3 回答 3

5

session_regenerate_id()session id用新生成的更新当前。它不会更改会话变量。

echo session_id();
session_regenerate_id();
echo session_id(); 

你应该unset会话来做到这一点:

unset($_SESSION); // or
$_SESSION = array();

如何开始新会话

session_start();
session_destroy();
session_regenerate_id();
unset($_SESSION);
session_start();
于 2012-10-09T09:35:41.890 回答
1

session_regenerate_id发送一个新的 cookie,但不会覆盖存储在$_COOKIE. 调用 后session_destroy,打开的会话 ID 将被丢弃,因此只需重新启动会话session_start将重新打开当前请求的原始会话(尽管现在为空)(后续请求将使用新的会话 ID)。而不是session_destroy+ session_start,使用$delete_old_session参数session_regenerate_id来删除以前的会话数据。

<?php
session_start();
/* Create a new session, deleting the previous session data. */
session_regenerate_id(TRUE);
/* erase data carried over from previous session */
$_SESSION=array();
?>

要开始一个新的会话并保持旧会话不变,只需将参数省略即可session_regenerate_id

来源:http ://de.php.net/manual/en/function.session-regenerate-id.php#107323

于 2012-10-09T09:36:52.313 回答
0

如果您想销毁会话变量,您可以执行以下操作:session_destroy(); 如果您想获得新 ID,您可以session_regenerate_id();

于 2012-10-09T09:36:46.370 回答