2010-10-13 9 views
15

Ze względów bezpieczeństwa danych i prywatności chciałbym wiedzieć, dlaczego Magento używa dwóch plików cookie dla jednej sesji frontendowej.Dlaczego Magento używa 2 plików cookie na sesję?

Wiem tylko, że jeden z nich jest ustawiony w Mage_Core_Model_Cookie::set(..), a drugi w Zend_Session::expireSessionCookie(), ale nadal nie mogę się domyślić, do czego są używane.

Po prostu nie mogę wymyślić żadnego powodu, dla którego potrzebny byłby drugi plik cookie dla tej samej domeny.

+0

Proszę zostawić komentarz przy opuszczaniu .. –

+0

Tak, wydaje się dość dziwne, aby zgodzić się na to pytanie bez komentarza. Wydało mi się to całkiem przyzwoitym pytaniem. –

+0

+1 dobre pytanie. – dmp

Odpowiedz

5

Udało mi się to naprawić, odwracając kolejność wywołania session_start() i instrukcję ustawiania pliku cookie w Mage_Core_Model_Session_Abstract_Varien::start(..). Te dwie linie wyglądają teraz tak:

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

Teraz tworzy tylko jeden pojedynczy plik cookie i nie ma żadnych skutków ubocznych.

BTW: Drugi plik cookie nie został utworzony w Zend_Session, jak zakładałem, ale zamiast tego obaj pochodzą z Mage_Core_Model_Session_Abstract_Varien::start(..).

+1

Ładne rozwiązanie, ale ostrożnie edytuj pliki podstawowe. Powinieneś (przynajmniej) utworzyć kopię w hierarchii plików 'app/code/local' zamiast bezpośrednio edytować rdzeń. Powinno to zminimalizować przerwy w uaktualnieniach/łatkach. –

+0

Tak, masz rację, faktycznie zrobiłem to w ten sposób. Nie lubię konieczności włamywania się do podstawowych plików, ale w takich przypadkach chyba nie ma szans. –

6

Mam zamiar nazwać ten jeden szczątkowy kod. Varien opiera się głównie na Zend Framework jako podporach dla Magento, więc wiele klas (na przykład Zend_Session) jest używanych jako klasy nadrzędne dla implementacji Magento.

Plik cookie z etykietą Varien oznaczony jako "frontend" zawiera nazwę strony odwiedzanej witryny (np. Będziesz mieć oddzielny plik cookie "admin", jeśli logujesz się przez serwer), podczas gdy plik cookie Zend wydaje się być światowy.

Zauważ, że udało mi się usunąć ciasteczko Zend bez żadnych widocznych szkodliwych efektów (moja sesja logowania i koszyk pozostały dostępne, a plik cookie nie został natychmiast wymieniony).

+1

Dzięki! Po prostu próbowałem usunąć drugi plik cookie i wygląda na to, że wcale nie jest potrzebny. Mogę więc całkowicie usunąć ten plik cookie bez żadnych skutków ubocznych. –

2

To jest interesujące. Właśnie sprawdziłem instalację wersji Enterprise i ustawiono tylko "PHPSESSIONID", "frontend" i "admin", nawet po zalogowaniu się w obu. Być może jest to nadal czynnie rozwijane.