- 用戶填寫用戶名和密碼。
- 如果正確,頁面會將一些信息(如
user_id
)加載到會話變量中。 - 該腳本使
header('Location')
重定向。 - 不知何故,下一頁不會識別會話...怎麼回事?
重定向是同一個域,和所有頁面都session_start();
重定向後丟失會話變量
,我發現它在IE發生的可能性比在FF ...奇怪。
user_id
)加載到會話變量中。header('Location')
重定向。重定向是同一個域,和所有頁面都session_start();
重定向後丟失會話變量
,我發現它在IE發生的可能性比在FF ...奇怪。
有沒有可能沒有啓用cookies?
爲了能夠將會話變量與特定的客戶端實例相關聯(即會話變量如何在瀏覽器和瀏覽器中同時使用而不會發生衝突),「會話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)。
查看Passing the Session ID瞭解更多詳情。
謝謝你的快速回答。你能解釋一下嗎? 「宣傳SID」是什麼意思?如果這再提示 - 只是發現在本地主機上它工作正常,但在服務器上出現了問題。 – 2009-12-07 17:23:01
我已經更新了我的答案,希望更清楚。 – 2009-12-07 17:28:29
你很清楚。感謝您的幫助。不幸的是,它並沒有幫助,我的cookies也被啓用了,正如我所說的,在本地主機上它很好用。 仍然我無法確定是什麼導致它轉儲會話。 有沒有失去會話變量的麻煩在PHP中重定向的另一種方式? 謝謝! – 2009-12-07 18:46:33
兩個想法:
header("Location: my_url.com/my_page.php?" . SID)
exit();
它只是我的header();
WordPress的文檔添加下面exit()
後曾指出,如果用戶的密碼更改的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);
你能發表一些代碼嗎? – SilentGhost 2009-12-07 17:17:09