2015-05-07 45 views
1

對於domain,一段時間cookie在單個站點上設置了不同的值。這導致一些人使用同名設置的Cookie,這兩個名稱均爲.www.domain.com.domain.com。該網站打算作爲www.domain.com訪問。這是通過.htaccess規則完成的。代碼將使用.domain.com。現在爲了進一步session.cookie_domain瀏覽器發送兩個Cookie - PHP的會話處理程序讀取錯誤

我遇到的問題是,當兩個cookie都存在時,瀏覽器發送兩個(都是有效的)。我看到這是如此在標題中,而且當傾銷出apache_request_headers(),但是,當我傾倒出$_COOKIE我只看到其中之一。

["Cookie"]=> 
    string(74) "foobar=hkej4qdnq5kismiq3kl07qv6k2; foobar=ocvn7anlu2f2k2l37nl9ou3c21" 

然後......

array(1) { ["foobar"]=> string(26) "hkej4qdnq5kismiq3kl07qv6k2" } 

我的會話界面read($id)方法檢查舊Cookie,而不是我們在登錄時設置的一個。

解決這個問題的最佳方法是什麼?我想我可以改變會話名稱/標識符並重新開始。或者可以評估我的read實現中的Apache頭文件。我沒有發現很多與搜索網站相關的東西,只是一些來自w3schools的絨毛污染了結果,所以我認爲這可能是一個很好的發佈在這裏。

+0

我有同樣的問題,並通過更改會話名稱解決它。 –

回答

1

我有同樣的問題,並通過更改會話名稱解決它。

PHP允許你訪問變量$_SERVER["HTTP_COOKIE"]並自己解析它。這允許你訪問cookie的兩個值,但是你仍然不能分辨正確和錯誤的cookie。

除非這些cookie包含真正有價值的數據,否則我不會關心舊的值,只是開始新的。

+0

有道理。我曾經這樣做過一次,但相信我仍然有一個條件,在那裏確定域使用cookie ...打算讓應用程序使用www /非www前綴的不同方法。支持這一點,所以我應該有一個一致的域設置前進。 – ficuscr

1

只需將會話名稱從PHPSESSID更改爲SITESESSID或您選擇的其他東西。這將確保您的應用程序一起忽略舊的Cookie。如果會話的生命週期爲0,那麼它的一個SESSION Cookie(在瀏覽器關閉時會被刪除),在這種情況下,您可以在幾天或一個月的實施後將會話名稱更改回PHPSESSID,因爲您可以確定沒有人擁有舊的cookie。

BTW:瀏覽器不發送兩個cookie。這只是你的舊會話cookie仍然活着。

+0

請求標題顯示正在發送兩個cookie。不知道我得到了你所做的區別。通過更改會話名稱(而不是重新創建愚蠢餅乾的根本原因),達成了相同的結論是最好的解決方案。 – ficuscr

+1

你是對的..瀏覽器將發送兩個餅乾..我的意思是服務器將只發送一個cookie創建會話...我把瀏覽器與服務器搞混了哈哈 –