Session_regenerate_id没有创建新的会话id


session_regenerate_id is not creating a new session id

我有一个脚本,这意味着完成当前会话并开始一个新的。我使用了一段代码,它在我的开发计算机上运行良好。但是,当我将它发布到生产服务器时,会话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的服务器之间会有不同?我该怎么做才能纠正呢?

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

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

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