[英]Issues with session_regenerate_id()
我正在使用Facebook的PHP SDK驗證用戶是否發表評論,並且效果很好。 驗證之后,我將用戶信息存儲在會話變量中,但首先調用session_regenerate_id()
,然后重新加載頁面。 頁面重新加載時,舊的會話數據仍然可用,包括Facebook SDK狀態變量,但是,我添加的會話變量不可用。 以下是代碼片段:
session_regenerate_id();
$_SESSION[...] = ...;
header('Location: ...');
die();
如果我取出session_regenerate_id()
那么一切都將正常運行。 有什么想法我做錯了嗎?
編輯
如果我在每次頁面加載時記錄session_id()
,就會看到session_regenerate_id()
生成一個新的ID,並且該會話包含了我期望的所有內容。 但是,當頁面重新加載時,會話ID是前一個會話ID,而不是新的會話ID,因此我無法訪問新的會話變量。 為什么會這樣?
經過大量日志記錄和掃描發送和接收的標頭之后,我確定在創建初始會話時,用於cookie的域為: .domain.com
(不帶www)。 但是, session_regenerate_id()
將cookie的域設置為: www.domain.com
。 當瀏覽器確定要發送哪個時,它總是發送原始的,因此使用的會話始終是舊的。 手動刪除該Cookie后,一切正常。
為了確保不會再次發生這種情況,我在開始會話之前添加了以下內容:
session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], true, true);
奇怪的是,.htaccess文件強制使用www.domain.com來保持一致性,因此我不確定為什么初始cookie的域設置為原來的樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.