2010-12-18 2 views
1

Ich habe Java-Anwendung unter Tomcat ausgeführt, die von Apache-Webserver konfrontiert ist. In meinem Code setze ich die Cookie-Domain als .example.comCookie wird für www.example.com anstelle von example.com gesetzt

aber immer noch meine Cookies zeigt unter www.example.com statt unter Beispiel.com im Client-Browser. Was ist so seltsam, dass Google Analytics-Cookies unter example.com angezeigt werden, aber mein eigener Code keine Cookies unter example.com speichern kann?

Apache-Server ist so eingerichtet, dass Anfragen für example.com als www.example.com in der Adressleiste des Client-Browsers angezeigt wird, wenn dies mit dem Problem zusammenhängt? Ich brauche diese ansonsten unterschiedliche Sitzungsidentifikation für example.com und www.example.com, was für meine Anwendung schlecht ist.

Antwort

0

Apache-Server-Setup, so dass Anfragen für example.com zeigt sich als www.example.com im Client-Browser Adressleiste, falls dies der Problem hat?

Ich bin nicht 100% sicher, aber das sieht wie die Wurzel des Problems aus. Wie veranlasst Apache den Client-Browser, www.example.com anstelle von example.com anzuzeigen? Höchstwahrscheinlich, indem jede Anfrage für example.com auf www.example.com umgeleitet wird. Wenn der Browser die Umleitung verarbeitet, sendet er eine Anfrage für www.example.com und denkt von diesem Zeitpunkt an, dass er mit www.example.com arbeitet.

Was passiert nun, wenn im Antwortheader ein Set-Cookie vorhanden ist? Es wird es offensichtlich als von www.example.com kommend behandeln. Es gibt keine Möglichkeit, dass ein Browser einem solchen Cookie erlaubt, seine Domain auf .example.com zu setzen, da dies ein Sicherheitsproblem wäre. Stellen Sie sich vor, dass mysite.somefreehosting.com ein Cookie für die Domain .somefreehosting.com setzt. Dann würde someothersite.somefreehosting.com diesen Cookie erhalten, was zu vielen Problemen führen kann. Der Standard gibt an, dass ein solcher Cookie abgelehnt werden sollte, aber ich wäre nicht überrascht, wenn einige Browser schlau genug wären, solche Fälle zu behandeln und .example.com als www.example.com zu behandeln.

Um sicher zu sein, empfehle ich, dass Sie überprüfen, was genau Ihre Website an den Browser sendet, indem Sie eine Anfrage mit etwas wie lwp-Anfrage-Skript senden. Sie werden sehen, welche Umleitungen geschehen und welche Header tatsächlich in der Antwort gesetzt sind, wie folgt:

[email protected]:~$ lwp-request -sSed http://google.com/ 
GET http://google.com/ --> 301 Moved Permanently 
GET http://www.google.com/ --> 302 Found 
GET http://www.google.co.il/ --> 200 OK 
Cache-Control: private, max-age=0 
Connection: close 
Date: Sat, 18 Dec 2010 18:54:57 GMT 
Server: gws 
Content-Type: text/html; charset=windows-1255 
Content-Type: text/html; charset=windows-1255 
Expires: -1 
Client-Date: Sat, 18 Dec 2010 18:54:57 GMT 
Client-Peer: 173.194.37.104:80 
Client-Response-Num: 1 
Set-Cookie: PREF=ID=368e9cfd56643257:FF=0:TM=1292698497:LM=1292698497:S=s-Jur84NgaNH5Mzx; 
    expires=Mon, 17-Dec-2012 18:54:57 GMT; path=/; domain=.google.co.il 
Set-Cookie: NID=42=bZ6goDV_b2MiWlTMONwiijaON5U_TBGB2_yNheonEwA1GVLU77EhyfUhk9Wvj70xTFrpvGy4s_aBp1UZtvRRnsnYjacjz_UVx0_iSr9R3nYXMyRtwkS5qV98_Egb16pZ; 
    expires=Sun, 19-Jun-2011 18:54:57 GMT; path=/; domain=.google.co.il; HttpOnly 
Title: Google 
X-XSS-Protection: 1; mode=block 
+0

Ich überprüfte das Senden dieser Anfrage und ich bekomme die gleiche Sequenz von GET wie google: GET -> http;//example.com 301 Permanent verschoben http; // www.example.com GET -> 302 Vorübergehend verschoben GET http://www.example.com/user/uid -> 200 OK. Der einzige Unterschied ist, dass Google 302 gefunden wird. –

+0

Die Nachricht ist nicht wichtig. Der Code ist alles, was zählt. Ihre letzte URL wurde von der SO-Engine analysiert, aber ich nehme an, dass sie http: // www.example.com/user/uid? Nun, in diesem Fall können Sie aus Sicherheitsgründen keine Cookies für .example.com setzen. Warum willst du das überhaupt? –

+0

Entschuldigung, ich meinte http; // www.example.com/user/uid. Da der Linux-Befehl lwp keine Cookies akzeptiert, würde mein Code zu http; // www.example.com/user/uid umleiten und das wird erwartet. Wenn die Cookies im Client-Browser aktiviert sind, wird diese Umleitung nicht ausgeführt. Meine Grails-Anwendung hat eine URL-Zuordnung, die alle Anfragen an '/' enthält, was bedeutet, dass Anfragen an example.com automatisch an example.com/user/index weitergeleitet werden (für Benutzerauthentifizierung/Cookie-Prüfungen). Ich bin mir nicht sicher, wie Grails das intern ist, vielleicht ist es nicht einmal eine Weiterleitung. –

Verwandte Themen