2010-01-08 3 views
7

Ich habe eine Site, auf der der Benutzer JavaScript und Cookies aktivieren muss, bevor er sich auf der Site anmelden kann. (Der JS-Teil ist fertig und funktioniert einwandfrei.) Im Moment haben wir einen Cookie gesetzt und leiten den Benutzer dann auf eine andere Seite um (in PHP). Das hat gut geklappt, aber jetzt haben wir eine Menge Leute, die die Seite, an die wir weitergeleitet werden, mit einem Lesezeichen versehen haben, die natürlich nicht den Cookie gesetzt hat und ihnen deshalb nicht erlaubt, sich einzuloggen.Verwendet das jQuery-Cookie-Plugin eine gültige Testmethode, um zu sehen, ob Cookies aktiviert sind?

Also versuche ich eine andere Lösung zu finden, um nach dem Cookie zu suchen und ich denke an die Verwendung der jQuery Cookie plugin. Ich frage mich, ob es in allen Browsern kompatibel ist (wenn JS natürlich aktiviert ist)?

+2

ich es nicht in allen Browsern getestet habe, aber der ganze Sinn von Plugins jQuery und jQuery mit ist Cross-Browser kompatibel zu sein. Auch "alle Browser" ist ein wenig breit; Ich würde IE6 und Opera als Randgruppen betrachten. –

+0

Leider muss ich für diesen Client IE6 haben. Opera würde ich gerne, aber ich denke, ich kann ohne leben. –

Antwort

10

Thxs Shawn für your answer, aber leider, weil Browser nicht immer den Referrer senden, ist es nicht zuverlässig genug, um es jedes Mal verwenden zu können. Denn wenn es nicht gesetzt ist, enden Sie irgendwie in einer Schleife.

Die andere Lösung, an die ich gedacht habe, war die Umleitung auf eine komplett separate Seite, die selbst überprüft, ob Cookies aktiviert sind (durch Umleiten auf sich selbst). Wenn Cookies aktiviert sind, wird auf die ursprüngliche Seite umgeleitet. Wenn nicht, würde es auf eine Seite mit dem Problem umleiten. Ich denke, das sollte funktionieren, aber ich bin mir nicht sicher.

Am Ende habe ich versucht, das jQuery Cooke Plugin in IE 6, 7 und 8, Safari 4, Google Chrome 4, Firefox 3.5, Opera 10.2 und auf ein paar verschiedene Konfigurationen und es funktionierte in allen von ihnen. Hier ist der Code Ich verwende:

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

Es ist nicht perfekt, aber ich denke, es in 95% der Fälle funktioniert. Sonst wird es scheitern und ihnen einfach nicht erlauben, etwas zu tun.

+2

Ja, ich denke, es wird für jeden Browser funktionieren, hier ist ein weiteres Codebeispiel http://blog.nickburwell.com/2009/05/check-if-cookies-are-enabled-on-client.html –

1

Sie können den Referrer der Seite überprüfen und wenn es nicht Ihre Homepage ist, können Sie sie dorthin umleiten. Wenn der Referrer Ihre Startseite ist und kein Cookie gesetzt ist, wissen Sie, dass Cookies nicht aktiviert sind.

+0

Ich habe dies versucht, aber der Verweis ist nicht im $ _SERVER-Array festgelegt. Irgendwelche Ideen? Ich habe versucht sowohl eine 302 und 307. –

+0

Versuchen Sie @ $ HTTP_REFERER oder getenv ("HTTP_REFERER"). –

+1

Ich habe diesen Header tatsächlich gefunden ("Location: ..."); Am Ende wird der Referrer nicht gesetzt (zumindest nicht in Safari), also habe ich stattdessen einen verwendet, der perfekt funktioniert hat. –

1

Ich mag diese 1-Liner Funktion:

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