簡體   English   中英

session_regenerate_id()的問題

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

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