我使用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
答案 0 :(得分: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();
{{1}}
答案 1 :(得分: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
答案 2 :(得分:0)
如果要销毁会话变量,可以执行以下操作:session_destroy();
如果您想获得新ID,可以session_regenerate_id();