2010-02-26 17 views
13

Dlaczego po utworzeniu pliku cookie na stronie www.example.com i sprawdzeniu go na example.com plik cookie tam nie istnieje? Zamierzam po prostu użyć przekierowania nie-www do domeny www. Ale jak mam to rozwiązać?Problem z plikiem cookie PHP - www lub bez www

+0

Musisz jawnie ustawić domenę plików cookie. Lub użyj czegoś takiego jak https://github.com/delight-im/PHP-Cookie, który automatycznie obsługuje sprawę "www" a "nie-www". – caw

Odpowiedz

32

Przeglądarki są głównym winowajcą, a nie PHP. Przechowują dane według domeny i nie wiedzą, że www jest szczególnym przypadkiem; z ich punktu widzenia, www.mydomain.com i mydomain.com są różnymi ciągami, a zatem mają różne zasady bezpieczeństwa. Jest jednak coś, co możesz zrobić.

Podczas ustawiania ciasteczka należy użyć .mydomain.com (z kropką wiodącą). Dzięki temu przeglądarka Twojego użytkownika sprawi, że plik cookie będzie dostępny dla mydomain.com i wszystkich subdomen, w tym www. PHPma argument $domain, ale jest piąte na liście, więc może być konieczne ustawienie $expire i $path na ich wartości domyślne, aby uzyskać do niego dostęp.

setcookie('name', 'value', time()+3600, '/', '.mydomain.com'); 

Dla spójności, jednak użytkownik może rozważyć przekierowanie całego ruchu internetowego do określonej domeny, to znaczy wysłać mydomain.com ruchu www.mydomain.com lub vice versa. Moja niejasna znajomość SEO (edycja, jeśli jest niepoprawna) mówi mi, że jest to pomocne, aby nie mieć zduplikowanych treści, a to oszczędza wszystkich takich problemów z uwierzytelnianiem. Dodatkowo, jeśli przechowujesz zasoby w poddomenie, posiadanie plików cookie spowalnia ruch przez konieczność transportu za każdym razem, więc przechowywanie plików cookie aplikacji tylko pod numerem www zapewnia zwiększenie prędkości.

Here is a tutorial on how to accomplish such a redirect in Apache.

+0

Jesteś blisko rzeczy SEO. Nie ma znaczenia, czy wybierzesz wykonanie z lub bez strony www; tak długo, jak wybierasz jedną i trzymasz się jej. – NotMe

+0

Edytowany w celu uogólnienia :) – Matchu

+0

www. * Nie jest przypadkiem specjalnym. Jest to konwencja, ale nie ma skodyfikowanego znaczenia w dokumentach RFC protokołu HTTP/cookie.Byłoby całkiem absurdem, gdyby przeglądarki dały magiczny efekt specjalnej obróbce www. Niezależnie od +1. –

-2

ponieważ php tłumaczy www.mydomain.com inaczej niż mydomain.com. Jeśli domeny nie są w 100% identyczne, pliki cookie nie będą pasować.

I jestem pewien, że przeglądarka również szuka 100% dopasowania nazwy domeny, zanim serwer może je nadpisać.

Po prostu użyj .htaccess, aby przekierować. Jest to jedyny PEWNY sposób na rozwiązanie tego problemu we wszystkich przeglądarkach.

+0

Przedrostkowanie domeny z kropką rozwiązuje problem. Dopasowanie ścisłe nie jest wymagane. – TheJacobTaylor

+1

"ponieważ php tłumaczy" ... Nie ma to nic wspólnego z php i wszystkim, co ma związek z przeglądarkami. Przeglądarki nie wysyłają żadnych plików cookie do witryny. Wybierają tylko te, które mają pasujące nazwy domen. – NotMe

0

wierzę można ustawić cookie w example.com (naprawdę .example.com) i zostanie on wysłany, gdy idą do www.example.com, ale nie odwrotnie. Ta standardowa polityka bezpieczeństwa ma zapobiegać wysyłaniu prywatnych danych użytkowników do niezamierzonych serwerów.

Osobiście używam virtualhosts w moim apache2.conf:

<VirtualHost *:80> 
    ServerName example.com 
    RedirectMatch (.*) http://www.example.com$1 
</VirtualHost> 

... w tym przykładzie, każdy próbuje załadować np http://example.com/index.html jest przekierowany do http://www.example.com/index.html.

1
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com"); 
Powiązane problemy