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
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. –
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? –
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. –