session_regenerate_id(true)不起作用

时间:2012-10-09 09:34:04

标签: php

  

可能重复:
  Close session and start a new one

我使用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

3 个答案:

答案 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();

How to start a new session

{{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();