2010-10-13 48 views
15

出於數據安全和隱私的原因,我想知道爲什麼Magento爲一個前端會話使用兩個cookie。爲什麼Magento每個會話使用2個cookie?

我所知道的是其中一個正在Mage_Core_Model_Cookie::set(..)中設置,另一個在Zend_Session::expireSessionCookie()中,但我似乎無法弄清楚它們的用途。

我想不出任何理由爲什麼一個需要爲同一域中的第二個cookie。

+0

downvoting時,請發表評論.. – 2010-10-13 13:53:09

+0

是啊,這似乎很奇怪,downvote沒有評論這個問題。看起來像一個相當不錯的問題給我。 – 2010-10-13 14:03:18

+0

+1好問題。 – dmp 2010-10-13 14:15:52

回答

5

我可以通過調用session_start()調用的順序和在Mage_Core_Model_Session_Abstract_Varien::start(..)中設置cookie的語句來解決此問題。這兩條線現在看起來像這樣:

$cookie->set(session_name(), $this->getSessionId()); 
session_start(); 

它現在只創建一個cookie,它似乎沒有任何副作用。

BTW:另一個cookie並沒有Zend_Session中創建爲我承擔,而是他們兩人從Mage_Core_Model_Session_Abstract_Varien::start(..)來了。

+1

不錯的解決方案,但要小心編輯核心文件。您應該(至少)在'app/code/local'文件層次結構中創建一個副本,而不是直接編輯核心。這應該使升級/修補程序的損壞最小化。 – 2010-10-14 21:57:22

+0

是的,你說得對,其實我是這樣做的。我不喜歡必須破解核心文件,但在這樣的情況下,我猜想沒有機會。 – 2010-10-15 05:38:12

6

我要叫這個殘留的代碼。 Varien在很大程度上依賴於Zend框架作爲Magento的基礎,所以很多類(例如Zend_Session)都被用作Magento實現的父類。

Varien-set cookie標記爲「前端」是您訪問的網站部分的名稱空間(例如,如果您通過後端登錄,您將擁有一個單獨的「admin」cookie),而Zend cookie似乎是全球。

另外請注意,我是能夠刪除了Zend餅乾沒有任何明顯的不利影響(我的登錄會話和車仍然可以訪問,以及Cookie沒有立即更換)。

+1

謝謝!我只是試圖刪除第二個cookie,看起來好像根本不需要。所以我可能會完全刪除這個cookie,沒有任何副作用。 – 2010-10-13 14:17:22

2

這很有趣。我剛剛檢查了企業版的安裝,並且只設置了「PHPSESSIONID」,即使登錄到這兩者,「前端」和「管理員」也丟失。也許這是一些仍在積極開發中的東西。

相關問題