Ho uno strano capriccio con i cookie in IE. Quando un utente accede al sito, sto generando un nuovo ID di sessione e quindi è necessario sovrascrivere il cookie. Il flusso è fondamentalmente:Cookie non si rinnova/sovrascrive in IE
- client va a
https://secure.example.com/users/login
pagina, ricevere automaticamente un ID di sessione - POST client credenziali di accesso allo stesso indirizzo
cliente riceve le seguenti intestazioni Set-Cookie insieme ad un reindirizzamento 302 per
https://secure.example.com/users/mypage
:CAKEPHP = cancellato; scade = Dom, 05-Apr-2009 04:50:35 GMT; percorso =/
CAKEPHP = 98hnIO23 ...; scade = Lun, 12 Apr 2010 04:50:36 GMT; percorso = /; garantireclient dovrebbe visitare
https://secure.example.com/users/mypage
, presentando il nuovo id di sessione.
Questo funziona in tutti i browser, ad eccezione di IE (testate in 7 & 8). IE mantiene il vecchio ID di sessione non autenticato e viene reindirizzato alla pagina di accesso. Funziona sul mio ambiente di test locale (utilizzando un certificato autofirmato allo https://localhost:8443/...
), ma non sul server live.
Sto usando CakePHP e semplicemente emetto un $this->Session->renew()
, che produce le intestazioni dei cookie sopra.
Qualche idea su come ottenere IE per accettare il nuovo cookie?
Ecco l'intestazione 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
Credo di aver trovato il problema: IE sta inviando due cookie di nome identico. Ecco la prossima richiesta al server:
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...
noti che invia due biscotti, quella che ha ricevuto dopo l'accesso, ma anche quello vecchio. Ha ricevuto il vecchio nella pagina principale example.com
, impostato con path=/
. Lo invia anche per richieste a secure.example.com
. Non viene sostituito dall'intestazione precedente, ma lo aggiunge come cookie aggiuntivo. Come posso impedirgli di farlo?
Forse provare ad eliminare in modo specifico il vecchio cookie prima di crearne uno nuovo? –
@David Ho pensato che è quello che sto facendo. In quale altro modo dovrei farlo nella stessa intestazione? – deceze