Tengo un extraño capricho con cookies en IE. Cuando un usuario inicia sesión en el sitio, estoy generando un nuevo ID de sesión y, por lo tanto, necesito sobrescribir la cookie. El flujo es básicamente:Cookie no renovar/sobrescribir en IE
- cliente va a
https://secure.example.com/users/login
página, recibir automáticamente un identificador de sesión - POST cliente credenciales de acceso a la misma dirección
cliente recibe los siguientes encabezados Set-Cookie junto con una redirección 302 a
https://secure.example.com/users/mypage
:CAKEPHP = eliminado; expira = dom, 05-abr-2009 04:50:35 GMT; ruta =/
CAKEPHP = 98hnIO23 ...; expira = Lun, 12 de abril de 2010 04:50:36 GMT; ruta = /; asegurarcliente se supone que debe visitar
https://secure.example.com/users/mypage
, presentando el nuevo identificador de sesión.
Esto funciona en todos los navegadores, excepto IE (probado en 7 & 8). IE conserva la identificación de sesión antigua, no autenticada, y se redirige a la página de inicio de sesión. Funciona en mi entorno de prueba local (utilizando un certificado autofirmado en https://localhost:8443/...
), pero no en el servidor activo.
estoy usando CakePHP y simplemente emitir una $this->Session->renew()
, que produce las cabeceras de cookies anteriores.
Alguna idea de cómo conseguir IE para aceptar la nueva cookie?
Aquí está la cabecera completa:
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
Creo que he encontrado el problema: IE está enviando dos galletas de nombre idéntico. Aquí está la siguiente petición al servidor:
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...
en cuenta que se envía dos galletas, el que recibió después de iniciar la sesión, sino también a la antigua. Recibió el anterior en la página principal example.com
, establecido con path=/
. También lo está enviando para solicitudes al secure.example.com
. No se reemplaza por el encabezado anterior, sino que lo agrega como una cookie adicional. ¿Cómo puedo evitar que haga eso?
¿Quizás intente eliminar específicamente la cookie anterior antes de crear la nueva? –
@David, pensé que eso es lo que estoy haciendo. ¿De qué otra manera podría hacer eso en el mismo encabezado? – deceze