2014-06-09 27 views
7

UPDATE: Anche dopo aver scaricato il "fisso" 2.2.0, i file di log di aggiornamento stanno ancora riempiendo di:CodeIgniter 2.2.0 errore di mancata corrispondenza HMAC

Session: HMAC mismatch. The session cookie data did not match what was expected.

Dopo l'aggiornamento da CodeIgniter 2.1.3 a 2.2.0 Viene visualizzato l'errore:

Session: HMAC mismatch. The session cookie data did not match what was expected.

L'estensione Mcrypt è abilitata. Se imposto $ config ['sess_encrypt_cookie'] = FALSE; (non un'opzione per la produzione) non ci sono errori. Qualsiasi aiuto molto apprezzato.

+0

Sto avendo lo stesso errore. L'unica differenza è che ho aggiornato da 2.1.4 a 2.2.0 – Josh

risposta

3

CI_Input -> _ sanitize_globals() la funzione a volte rompere sessione crittografata per risolvere questo problema, ho cambiato /system/core/Input.php (versione 2.2, la linea 636)

$_COOKIE[$this->_clean_input_keys($key)] = $this->_clean_input_data($val); 

a

if(!(config_item('sess_encrypt_cookie') === TRUE) || $key!=config_item('sess_cookie_name')) 
    $_COOKIE[$this->_clean_input_keys($key)] = $this->_clean_input_data($val); 
+0

Grazie per aver confermato che questo era un problema di struttura. https://github.com/EllisLab/CodeIgniter/issues/3094#issuecomment-51899465 – suncoastkid

1

nel sistema/librerie/Sessions.php cambiamento Funzione _set_cookie:

if ($this->sess_encrypt_cookie == TRUE) 
{ 
    $cookie_data = $this->CI->encrypt->encode($cookie_data); 
} 
else 
{ 
    // if encryption is not used, we provide an md5 hash to prevent userside tampering 
    $cookie_data .= hash_hmac('sha1', $cookie_data, $this->encryption_key); 
} 

a:

if ($this->sess_encrypt_cookie == TRUE) 
{ 
    $cookie_data = $this->CI->encrypt->encode($cookie_data); 
} 

$cookie_data .= hash_hmac('sha1', $cookie_data, $this->encryption_key); 

per vedere se funziona.

vedi: https://github.com/EllisLab/CodeIgniter/issues/3086

3

Re-scaricare l'archivio CI 2.2, è stato ri-etichettato e sostituito.

+0

No, non l'hai fatto. :) – Narf

+0

non scaricarlo dal sito web ufficiale, scaricalo da github release – Josh

+0

... Sono stato io a darti il ​​link github. Non sai come cancellare la cache di download del tuo browser. – Narf

0

al di là della correzione di cui sopra, avevo bisogno di cambiare la seguente riga:

if ($key === $sess_cookie_name && config_item('sess_encrypt_cookie')) 

A:

if ($key === config_item('cookie_prefix') . $sess_cookie_name 
    && config_item('sess_encrypt_cookie')) 

Speranza che aiuta, saluti.

+0

Si prega di aggiornare la risposta per spiegare perché il codice funziona. –

+0

La patch fornita non rispetta il prefisso dei cookie. –