J'ai une étrange bizarrerie avec des cookies dans IE. Lorsqu'un utilisateur se connecte au site, je génère un nouvel identifiant de session et j'ai donc besoin d'écraser le cookie. Le flux est essentiellement:Cookie ne pas renouveler/écraser dans IE
- client va
https://secure.example.com/users/login
la page, recevant automatiquement un identifiant de session - POSTs client de références de connexion à même adresse
Client reçoit en même temps avec une redirection 302 les en-têtes de cookie mis suivants à
https://secure.example.com/users/mypage
:CAKEPHP = supprimé; expire = dim, 05 avril 2009 04:50:35 GMT; chemin =/
CAKEPHP = 98hnIO23 ...; expires = Lun, 12 Apr 2010 04:50:36 GMT; chemin = /;Le client est supposé visiter
https://secure.example.com/users/mypage
, présentant le nouvel ID de session.
Cela fonctionne dans tous les navigateurs, sauf IE (testé dans 7 & 8). IE conserve l'ancien ID de session non authentifié et est redirigé vers la page de connexion. Cela fonctionne sur mon environnement de test local (en utilisant un certificat auto-signé au https://localhost:8443/...
), mais pas sur le serveur live. J'utilise CakePHP et j'émets simplement un $this->Session->renew()
, qui produit les en-têtes de cookie ci-dessus.
Des idées comment obtenir IE pour accepter le nouveau cookie?
est ici l'en-tête complet:
HTTP/1.0 302 Moved Temporarily
Date: Thu, 08 Apr 2010 02:54:30 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: CAKEPHP=deleted; expires=Wed, 08-Apr-2009 02:54:30 GMT; path=/
Set-Cookie: CAKEPHP=d55c...; expires=Thu, 15 Apr 2010 02:54:31 GMT; path=/; secure
Last-Modified: Thu, 08 Apr 2010 02:54:30 GMT
Location: https://secure.example.com/users/mypage
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
Je crois avoir trouvé le problème: IE envoie deux les cookies de nom identique. Voici la prochaine requête au serveur:
GET /users/mypage HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, */ *
Referer: https://secure.example.com/users/login
Accept-Language: en-gb
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: secure.example.com
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: CAKEPHP=19c6...; CAKEPHP=d55c...
avis qu'il envoie deux cookies, celui qu'il a reçu après la connexion, mais aussi l'ancien. Il a reçu l'ancien à la page principale example.com
, réglé avec path=/
. Il l'envoie également pour les demandes au secure.example.com
. Il n'est pas remplacé par l'en-tête ci-dessus, mais l'ajoute en tant que cookie supplémentaire. Comment puis-je l'empêcher de faire ça?
Peut-être essayer de supprimer spécifiquement l'ancien cookie avant de créer le nouveau? –
@David Je pensais que c'était ce que je faisais. Sinon, comment pourrais-je faire cela dans le même en-tête? – deceze