2012-03-30 15 views
3

Wir verwenden JQuery AJAX zum Anmelden. Der Login-Dienst gibt ein HTTP 302 aus, wobei der Standort der GET für den angemeldeten Benutzer oder (im Falle eines Anmeldefehlers) ein REST-Endpunkt ist, der immer einen nicht autorisierten HTTP-Status zurückgibt. Zur gleichen Zeit wie die 302, geben wir einen Set-Cookie für die JSESSIONID aus. Der Cookie ist ein HttpOnly Cookie.jQuery Redirects und HttpOnly Cookies

Bei Verwendung eines direkten HTTP-Formularposts funktioniert die Umleitung einwandfrei und alles ist eingerichtet. Wenn Sie JQuery AJAX verwenden, funktioniert die Umleitung zu GET/user/{userId} nicht, da der Cookie nicht mit dem zweiten Aufruf gesendet wird. Dieser fehlgeschlagene zweite Aufruf sollte eine weitere Umleitung an den Endpunkt mit dem Status auth-failed auslösen, tut dies jedoch nicht. Wenn ich es überprüfe, sehe ich, dass der zweite Anruf "abgebrochen" wird. Was bedeutet das, und wie behebe ich das Problem in erster Linie?

+0

ähnliches Problem und wie es hier gelöst: http://stackoverflow.com/questions/199099/how-to- manage-a-redirect-request-nach-a-jquery-ajax-call – jfriend00

Antwort

1

Es ist möglich, dass Sie mit der gleichen Ursprungsrichtlinie in Konflikt geraten. Ist die Domäne, in der Sie sich anmelden, dieselbe, von der die Seite/Skriptdatei geliefert wurde?

Wenn nicht, müssen Sie CORS (Cross-Origin Resource Sharing) verwenden, um den Cookie zu erhalten.

Sie können mehr darüber erfahren hier:

http://www.html5rocks.com/en/tutorials/cors/

https://developer.mozilla.org/en-US/docs/HTTP_access_control

+0

Nur eine alte Frage aufräumen. Während diese Antwort nicht die vollständige Antwort war, ist es nahe genug. Im Wesentlichen musste ich die vollständige Beschreibung der JSessionID überprüfen. Es gibt 2 Dinge im Spiel. 1) war, dass die Domäne für die Anmeldung HTTPS war, während die Domäne für die GET HTTP war, und somit in das CORS-Problem einging, wie Darren erwähnte. 2) war, dass es ein Pfadproblem (/ auth vs/rest) in dem Cookie gab, was dazu führte, dass der CORS-Fix auch nicht funktionierte. Durch das Beheben des Pfadproblems wurde das Problem endgültig gelöst. –