簡體   English   中英

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM