2010-09-07 62 views
1

我已經確保頁面全部檢查設置會話變量以確定登錄用戶,非常標準的東西。在遇到問題時,我將表單信息提交給後端頁面,後端頁面將處理該數據,然後重定向至成功/失敗確認頁面。在那段時間內,會話會丟失,至少會與變量進行會話。會話仍在,因爲我可以手動導航到一個安全的網頁後,它的工作。只有在後端重定向失敗後,纔會自動從後端頁面重定向到受保護頁面或其中一個不安全頁面上的鏈接。它可能是也可能不是相關的,但是在訪問多個安全頁面或執行其中一個使用有問題的後端頁面的操作之後,我的計算機上有兩個會話cookie來自域 - 一個註冊到domain.com,另一個註冊到www.domain.com。在我的智慧結束時,謝謝。PHP會話不在窗體和重定向後傳輸

回答

4

我在這裏看到兩個問題,但它們是相關的。

首先是您似乎在安全(https://)和不安全(http://)頁面之間彈跳。不應該在這些cookie之間共享Cookie,所以這就是爲什麼會話看起來中斷(PHP使用會話ID設置cookie)。

另一個密切相關,並且在domain.comwww.domain.com之間共享。 Cookie可以共享一個方向,但不能共享另一個方向。不要擔心:只需選擇一個主機名並堅持使用即可。然後檢查您是否將會話的Cookie域設置爲正確的域。

+0

我要指出,我mispoke我說擔保,我不是故意暗示HTTPS安全,只是頁面正在覈實負荷用戶的會話狀態。兩屆會議的問題是,爲什麼首先有兩個是不明確的。這些調用都是相同的session_start()調用,但仍然存在兩個不同的cookie。 – drewster 2010-09-07 04:05:19

+0

也許你的一箇中間頁面實際上並沒有執行'session_start()'。或者在輸出完成後試圖做到這一點。 – staticsan 2010-09-07 04:17:02

+0

以一個五頁週期爲例,所有頁面開始一個會話。這將是登錄頁面 - >主要安全頁面 - >背面操作頁面 - >成功頁面 - >返回主頁面,創建兩個不同的會話。沒有www的domain.com似乎在步驟3左右彈出,在php頁面上,用戶永遠不會看到只處理數據。我通過對網站其他部分使用的用戶變量進行相同的測試來確保第4步的測試。 – drewster 2010-09-07 05:00:45