2010-01-08 12 views
7

Mam witrynę, która wymaga od użytkownika włączenia obsługi JavaScript i plików cookie przed zalogowaniem się na stronie. (Część JS jest wykonana i działa idealnie.) W tej chwili ustawiamy plik cookie, a następnie przekierowujemy użytkownika na inną stronę (w PHP). To zadziałało dobrze, ale teraz mamy grupę ludzi, którzy utworzyli zakładkę do strony, do której przekierowujemy, co oczywiście nie ma zestawu plików cookie i dlatego nie pozwala im się zalogować.Czy używanie wtyczki jQuery Cookie jest prawidłowym sposobem sprawdzania, czy pliki cookie są włączone?

Próbuję znaleźć inne rozwiązanie, aby sprawdzić plik cookie i myślę o użyciu jQuery Cookie plugin. Zastanawiam się, czy jest kompatybilny we wszystkich przeglądarkach (gdy oczywiście JS jest włączony)?

+2

nie testowałem go we wszystkich przeglądarkach, ale cały sens posiadania jQuery i jQuery wtyczki ma być kompatybilne z różnymi przeglądarkami. Ponadto "wszystkie przeglądarki" są trochę szerokie; Uznałbym, że IE6 i Opera są na marginesie. –

+0

Niestety dla tego klienta potrzebuję IE6. Opera chciałbym, ale myślę, że mogę żyć bez. –

Odpowiedz

10

Thxs Shawn dla your answer, ale niestety, ponieważ przeglądarki nie zawsze wysyłają odnośnik, nie jest on wystarczająco wiarygodny, aby móc go używać za każdym razem. Ponieważ jeśli nie jest ustawiony, to w pewnym sensie kończy się pętlą.

Innym rozwiązaniem, o którym pomyślałem, było przekierowanie na zupełnie osobną stronę, która sama w sobie sprawdza, czy włączone są pliki cookie (przez przekierowanie do siebie). Jeśli pliki cookie są włączone, nastąpi przekierowanie z powrotem na oryginalną stronę. Jeśli nie, przekierujemy na stronę dotyczącą problemu. Myślę, że to powinno zadziałać, ale nie jestem pewien.

W końcu wypróbowałem wtyczkę jQuery Cooke w IE 6, 7 i 8, Safari 4, Google Chrome 4, Firefox 3.5, Opera 10.2 oraz w kilku różnych konfiguracjach i działało we wszystkich z nich. Oto kod, którego używam:

$.cookie('test_cookie', 'cookie_value', { path: '/' }); 
if ($.cookie('test_cookie') == 'cookie_value') { 
    // cookie worked, set/enable appropriate things 
} 

Nie jest idealny, ale myślę, że zadziała w 95% przypadków. W przeciwnym razie zawiedzie i po prostu nie pozwoli im nic zrobić.

+2

Tak, myślę, że będzie działać dla każdej przeglądarki, tutaj jest inny przykład kodu http://blog.nickburwell.com/2009/05/check-if-cookies-are-enabled-on-client.html –

1

Możesz sprawdzić stronę odsyłającą i jeśli to nie jest Twoja strona główna, możesz tam ją przekierować. Jeśli strona odsyłająca jest Twoją stroną domową i nie ma zestawu plików cookie, będziesz wiedzieć, że nie ma włączonych plików cookie.

+0

Próbowałem tego, ale program wywołujący nie jest ustawiony w tablicy $ _SERVER. Jakieś pomysły? Próbowałem zarówno 302, jak i 307. –

+0

Wypróbuj @ $ HTTP_REFERER lub getenv ("HTTP_REFERER"). –

+1

Tak naprawdę znalazłem ten nagłówek ("Lokalizacja: ..."); nie kończy ustawiania strony wywołującej (przynajmniej w Safari), więc użyłem , które działało idealnie. –

1

Lubię tę funkcję 1 Wkład:

function cookiesEnabled() { 
    return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid'; 
}