[英]Losing session variables after redirect
user_id
加載到會話變量中。 header('Location')
重定向。 重定向到同一個域,所有頁面都有session_start();
而且我發現它更有可能發生在IE中而不是FF ...奇怪。
是否可能未啟用Cookie?
為了能夠將會話變量與特定客戶端實例相關聯(即,如何在瀏覽器和我的瀏覽器上同時使用會話變量而不會發生沖突),可以使用“會話ID”(或“SID”) )每個會話生成。 此ID通常以cookie的形式存儲在服務器和客戶端上。 但是,如果未啟用cookie,則會話ID將作為每個請求中URL的查詢字符串的一部分傳遞,以便服務器可以知道哪個會話ID屬於客戶端。
當您通過header()
調用重定向時,PHP不會自動將SID插入到新請求中,因此您需要自己附加它,格式為:
header("Location: my_url.com/my_page.php?" . SID)
其中SID
是由PHP定義的常量,包含查詢字符串的必要部分(相當於session_name() . '=' . session_id()
,如果存在會話ID)。
有關更多詳細信息,請參閱傳遞會話ID 。
我剛才遇到了類似的問題,解決方法是簡單地添加一個exit(); 標題(..)重定向下的指令。
兩個想法:
header("Location: my_url.com/my_page.php?" . SID)
exit();
它只在我在header();
下面添加exit()
后才起作用header();
WordPress文檔指出,如果更改用戶密碼,將清除cookie。 無論重定向是否發生,這都會導致會話中斷。 只要您可以阻止cookie被清除(並且exit()
可以執行該操作,如其他答案所示),而不是會話應該保留。
注意:如果正在更新當前用戶的密碼,則cookie將被清除!
http://codex.wordpress.org/Function_Reference/wp_update_user
我今天遇到了這個問題,一直在尋找解決方法。 我已經擁有了其他所有人都提到的內容,無法在任何地方找到答案。
最后,我在使用Firebug
觀察會話變量后找到了答案。 我注意到在變量丟失的頁面上,會話Parameter:secure
由於某些我不知道的原因而被設置為true
。
修復是在創建會話之前將secure
參數設置為false 。
我使用session_set_cookie_params
完成了這個。 像這樣的東西:
session_set_cookie_params([lifetime], [path], [domain], false, true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.