2009-06-29 79 views
1

我在PHP的$ _SESSION存儲登錄信息的站點上設置了登錄設置,並且如果選中複選框,還會設置一個包含登錄信息的兩週cookie。如果通過POST提交有效的登錄信息或者cookie均爲真,則認爲用戶已登錄。爲什麼cookie會在IE6/8中消失,我該怎麼辦?

上FF3 /鉻的行爲如預期,至少與「記住我」複選框選中:登錄您是爲被記錄在治療部位上任何地方

然而,有人工作。 IE6表示,她登錄了一個地方,點擊了該網站其他部分的鏈接,並被要求重新登錄。我遇到了(多IE)IE6的一些麻煩,但是我在IE8上重現了類似的行爲,包括設置高級隱私設置 - >始終允許會話Cookie,並設置Cookie權限盡可能寬容。這種行爲是相同的:以一種應該設置_SESSION和兩週cookie的方式登錄到一個地方,點擊到另一個頁面的鏈接,並且該頁面顯示一個登錄屏幕,因爲它不能識別你登錄。在Gentoo服務器上PHP是5.2.8。

任何建議或資源得到認可的cookies?

-

[增加了交通檢查與小提琴手後:]

謝謝;我已經下載了Fiddler 2.

Fiddler在報告中提到了Set-Cookie:[name] = deleted ...。我目前對於爲什麼感到困惑。如果設置了$ _GET ['logout'],那麼檢查並顯示登錄屏幕的包含文件只有一個可以刪除相關cookie的區域。我沒有看到發生這種情況,並且當我在刪除cookies的語句之前將一個error_log()語句放入條件內時,沒有其他消息顯示爲正在記錄。

回答

1

我最終發現的內容如下所示:Firefox和IE的行爲不同,因爲當缺失文檔處於已設置的14天Expires:標頭內時,它們以不同的方式處理緩存。

Firefox顯然是檢查一次丟失的數據,然後不再請求它。另一方面,IE瀏覽器繼續檢查樣式表給出了錯誤路徑的項目,獲得了404個頁面,並且自定義404頁面做了登入的樣板邀請,從而觸發用戶被註銷(可能不是最好的樣板)。我猜這個樣式表被緩存了,但是IE一直在要求丟失的項目。

所以它緩存差異加間接包含加上404頁面行爲。

3

夫婦的建議

  • 嘗試使用Fiddler或類似檢查HTTP請求和響應,看看正在發送和發送的cookie。這提供了更多的洞察什麼是錯誤
  • 嘗試讓您的應用程序輸出P3P header,例如, header('P3P: CP="CAO PSA OUR"');
+0

esp。看看「它正在工作」和「你沒有登錄」之間發生了什麼變化。客戶在最後一次回覆中收到哪些cookies以及它發送了哪些cookie。提琴手是一個很好的工具。 – VolkerK 2009-06-29 20:25:03

1

您需要更具體。準確瞭解如何在兩臺瀏覽器上覆制此行爲,並找到了錯誤。例如,可能有一兩頁你沒有打電話給session_start()

重要的是要記住,如果你特別$ _SESSION變量沒有被人看到是非常重要的,並導致重定向到您的登錄,這是最有可能你的系統的一部分即碎。

2

有點微妙的東西可能會跳出來咬你,但IE不允許帶下劃線的域名(例如:developer_1_test.example.com),而其他瀏覽器讓你逃避這一點。你不是v.likely爲此在生產,但它是一個簡單的監督在開發環境中,你要創建一個虛擬主機一堆針對不同的開發人員/編碼分支機構/等進行。

1

我在這種情況發生時檢查的第一件事是setcookie()函數的域參數設置正確。

我見過cookie domain設置爲'example.com'的情況,但該網站正在通過'www.example.com'訪問。

例如,如果你登錄到example.com的頁面,然後點擊那個帶你到一個頁面上www.example.com的鏈接,你將不再登錄。

的解決方法是要麼確保你所有的內部鏈接是一致的,要麼你用'.example.com'來設置你的cookie,這將啓用所有子域的cookie。