2010-10-18 4 views
5

Wir haben vor Kurzem unsere Anmeldung geändert, um HTTPS zu verwenden, und wir haben Probleme mit der Anmeldung.HTTPS-Anmeldung speichert die JSESSIONID nicht in einem Cookie

Nach der Anmeldung wird der Benutzer auf eine unverschlüsselte (HTTP) Seite umgeleitet. Wenn diese Seite erreicht wird, überprüft die Site, ob der Benutzer angemeldet ist. Sie erstellt eine neue Sitzung und es scheint, dass der Benutzer nicht angemeldet ist und unser Benutzer auf die Anmeldeseite umgeleitet wird. Wenn sich der Benutzer erneut anmeldet, funktioniert es.

Die Cookies sind nicht als https-only eingestellt, aber sie scheinen auf http-Seiten nicht zu funktionieren.

Weiß jemand, warum dies passieren könnte.

Edit:

Ich sollte erwähnt, dass die Seite, die den Login zeigt auf eine andere URL ist. (Es gibt eine Anmeldeseite von der Maschine, auf der die Tomcat-Instanz ausgeführt wird, aber die Marketing-Site befindet sich in einer Wordpress-Installation und verwendet eine andere Domäne).

Ich kann die Methode HTTP-Anfrage nicht verwenden, um den Cookie zu setzen, da die Standardeinstellungen von Internet Explorer das Speichern des Sitzungscookies verhindern.

+0

Können Sie die Sitzung als Post-Parameter an die http-Seite senden und die Sitzung auf der neuen Domäne einrichten lassen? –

+0

OP hat erklärt, dass er/sie nicht in der Lage wäre, irgendwelche Antworten zu verifizieren, die so geschlossen werden wie TL. – Kev

+0

Dies muss von den Mächten wiedereröffnet werden, da es sich um ein echtes und anhaltendes Problem handelt, das unmöglich zu lösen scheint. Wir haben ein Team von Entwicklern, die seit Monaten versuchen, eine Lösung zu finden. Die Aktualisierung von Tomcat funktionierte nicht so, wie es beabsichtigt zu sein scheint, aber dieses beabsichtigte Verhalten macht es unmöglich, mit externen Domänen zu arbeiten, und das ist nicht sehr Web 2.0! –

Antwort

1

Wenn Sie https verwenden, erstellt Tomcat die jsessionid über einen sicheren Cookie, der nicht über eine nicht sichere Verbindung übertragen werden kann. Wenn Sie also auf http zurückgreifen, ist die Sitzung verloren.

Die Abhilfemaßnahme (die ich habe es selbst nicht getan) scheint die Sitzung über eine HTTP-Anforderung zu Gründung vor auf https umgeleitet, und dann einen Filter in dem HttpRequestWrapper Einstellung in die nicht sichere Cookie zu stopfen.

Ich weiß nicht viel darüber, aber hier sind ein paar Referenzen:

+0

Ich frage mich, warum es für Sie funktioniert, wenn sich der Benutzer zum zweiten Mal anmeldet. – christian

+0

Da eine der Weiterleitungen auf eine HTTP-Seite (nicht sicher) geht. – partkyle

+0

Das würde funktionieren, aber das Problem ist, dass unsere Marketing-Site eine andere URL hat, die verhindert, dass Internet Explorer (mit den Standardeinstellungen, zumindest) ein Cookie von einer anderen Domain setzt. Hast du irgendwelche Ideen dazu? – partkyle

3

Wir haben dieses Problem mit unserer App haben. Wir wollten ein ähnliches Verhalten bei der Anmeldung über https und dann auf eine http-Seite umleiten.

Das Problem ist, dass wenn Tomcat die Sitzung unter https erstellt, erstellt ein sicheres Cookie, das nicht in http gelesen werden kann. Beachten Sie, dass dies als Fehler in Tomcat gespeichert und als "kein Fehler" markiert wird. ist „Eine Möglichkeit, die Sitzung in Tomcat, zu halten, wenn die Session-Cookie wird im SSL-Modus erstellt bekommen:

Die Lösung, die wir auf der Nachricht in diesem Forum gelandet basierend http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

Zitiert aus Foren-Thread um den Browser auszutricksen, indem der nicht sichere Cookie erstellt wird, wenn der sichere Cookie erstellt wird. " Dies geschieht über einen Filter, der die Anforderung umschließt und request.getSession() überschreibt. Es hat sehr gut für uns funktioniert.

Als eine Nebenbemerkung wird die Umleitung von einer https zu http-Seite eine Warnmeldung in einigen Versionen von Internet Explorer angezeigt "Sie werden auf eine Verbindung umgeleitet, die nicht sicher ist." Die einzige Möglichkeit, dies zu vermeiden, ist die Umleitung mit einem Meta-Refresh-Tag. Geben Sie insbesondere eine leere Seite von der ursprünglichen https-Anfrage mit einem Meta-Tag zurück, das auf eine http-Seite aktualisiert wird. Dies vermeidet die Warnmeldung auf Kosten, den Code etwas komplizierter zu machen.

(Ich bemerkte gerade einige der Ratschläge hier ist eine Wiederholung einer früheren Antwort - ich entschuldige mich, aber Post wird sowieso, da es von direkter Erfahrung ist).

Edit: Ich sehe in Ihren Kommentaren haben Sie zwei Domänen, die die Verwendung von Cookies erschwert. Können Sie einen Proxy oder Webserver wie Apache verwenden, um den Endbenutzern nur eine Domäne zu präsentieren?

+0

Die neue URL für den genannten Forenthread scheint https://forums.oracle.com/forums/thread.jspa?threadID=1394970 zu lauten – ivant

0

Wenn Sie verifiziert haben, dass das Secure-Only-Flag deaktiviert ist und der erste Cookie korrekt gelöscht wird, würde ich vermuten, dass ein Pfadproblem vorliegt, das verhindert, dass das Cookie erneut angezeigt wird.

Verwandte Themen