簡體   English   中英

重定向后丟失會話變量

[英]Losing session variables after redirect

  1. 用戶填寫用戶名和密碼。
  2. 如果正確,頁面會將一些信息(如user_id加載到會話變量中。
  3. 該腳本使header('Location')重定向。
  4. 不知怎的,下一頁不承認會議......怎么來的?

重定向到同一個域,所有頁面都有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(); 標題(..)重定向下的指令。

兩個想法:

  1. 在將任何內容發送到瀏覽器之前,session_start()是否位於腳本的頂部?
  2. 域名是否完全相同? www.mydomain.com重定向到mydomain.com會導致你描述的問題。
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.

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