[英]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.