2010-06-03 14 views
0

我有一個網站,我一直在我的客戶站點根目錄的子文件夾中進行測試。 我在測試過程中沒有登錄問題,但後來我將新站點文件從子目錄移到主站點根目錄,現在我幾乎每個頁面在安全區域刷新後都會丟失登錄狀態。將相關文件移動到站點根目錄後基於會話登錄的問題

我正在運行基於$ _session的登錄系統,該系統在每次頁面加載時刷新會話ID,並將比較值存儲在MySQL數據庫中。

有沒有人有什麼可能會導致此問題的建議?

+0

DEBUUUUUUUUG it!首先進行調試,然後雙方都要求和**回答**! – 2010-06-03 12:12:49

回答

0

Cookie通常是路徑相關的。您以前的基於子目錄的網站可能只會爲該子目錄設置Cookie(將瀏覽器綁定到用戶)。

解決此問題的一種方法是在舊的子目錄上放置一個重定向頁面,該頁面將cookie添加到「/」,然後重定向到根目錄上的新站點。

+0

不確定我關注。該子目錄在最終部署中不存在。 – YsoL8 2010-06-03 11:20:51

+0

瀏覽器中的Cookie通常設置爲特定路徑,因此,例如/ web-app-one中的頁面無法從/ web-app-two中讀取cookie。 – krico 2010-06-03 11:37:08

+0

session.cookie_path在phpinfo中設置爲/。這聽起來正確,因爲在一個文件夾中處理所有的安全問題。 – YsoL8 2010-06-03 11:51:30

0

如果更改會話ID,則會丟失先前會話中存儲的所有數據。您必須在每次會話開始命令後設置會話名稱

<?php 
session_name('AnySessName'); 
?> 

或使用其他機制來存儲變量跨會話。

+0

對不起,我的意思是一個名爲$ _session ['id']的值。這仍然適用? – YsoL8 2010-06-03 11:37:12

+0

好的。你可以寫 '<?php Echo $ _COOKIE ['UserSess']; ?>' 在您的頁面上。 重新加載頁面後是否更改? 瀏覽器在cookies中存儲會話標識符 – GOsha 2010-06-03 11:48:28

+0

不會返回任何內容! – YsoL8 2010-06-03 11:57:47

1

krico正確地暗示cookie路徑可能是原因(但提出的解決方案似乎有點愚蠢),但您已經說過並非如此。

檢查,看看究竟什麼餅乾(名稱,路徑,到期,旗)正在建立,並通過使用iehttpheaders(MSIE)LiveHeaders(火狐),或使用網絡嗅探器Wireshark的一樣返回。然後再問這個問題,提供你發現的細節。

C.

+0

按照http://stackoverflow.com/questions/2965878/intermitant-sessions中的要求 – YsoL8 2010-06-03 12:30:36