session_regenerate_id未创建新的会话ID

时间:2015-07-15 17:18:27

标签: php session session-state

我有一个脚本,用于完成当前会话并启动一个新会话。我使用了一段代码,它在我的开发计算机上运行良好。但是,当我将其发布到生产服务器时,会话ID始终保持不变。

以下是重启会话的代码:

session_start();

$_SESSION = array();
$_POST = array();
$_GET = array();

if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), 
              '', 
              time() - 42000,
              $params["path"], 
              $params["domain"],
              $params["secure"], 
              $params["httponly"]
    );
}
session_destroy();
session_write_close();
session_start();    

session_regenerate_id(true);

在最后一行,不会生成新的会话ID。

为什么运行PHP的两台服务器之间会有所不同?我该怎么做才能纠正它?

2 个答案:

答案 0 :(得分:3)

经过一些实验,我解决了这个问题。

如果已将任何文本写入响应,则session_regenerate_id(true)行不会重新生成新的会话ID。我已经有一系列echo语句发出文本用于调试目的,在我删除它们之后创建了新的会话id。

答案 1 :(得分:2)

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

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

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

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

如何开始新会话:

session_start();
session_destroy();
session_regenerate_id();
unset($_SESSION);
session_start();