2014-06-09 17 views
7

UPDATE: Nawet po pobraniu "stałe" 2.2.0, pliki dziennika aktualizacji nadal wypełnia się:CodeIgniter 2.2.0 błąd niedopasowania HMAC

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

Po aktualizacji z 2.1.3 do 2.2.0 CodeIgniter Otrzymuję błąd:

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

Rozszerzenie Mcrypt jest włączone. Jeśli ustawię $ config ['sess_encrypt_cookie'] = FALSE; (nie jest to opcja do produkcji) nie ma błędu. Każda pomoc bardzo doceniona.

+0

Mam dokładnie ten sam błąd. Jedyną różnicą jest to, że uaktualniłem z 2.1.4 do 2.2.0 – Josh

Odpowiedz

3

CI_Input -> _ sanitize_globals() funkcja czasami złamać szyfrowaną sesję aby rozwiązać ten problem, zmieniłem /system/core/Input.php (wersja 2.2, linia 636)

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

do

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

Dziękujemy za potwierdzenie tego problemu ramowego. https://github.com/EllisLab/CodeIgniter/issues/3094#issuecomment-51899465 – suncoastkid

1

w systemie/bibliotek/Sessions.php zmiany funkcyjne _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); 
} 

do:

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

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

aby sprawdzić, czy to działa.

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

3

ponownie pobrać archiwum CI 2,2, został ponownie oznakować i wymienić.

+0

Nie, nie zrobiłeś tego. :) – Narf

+0

nie pobieraj go z oficjalnej strony internetowej, pobierz go z wydania github – Josh

+0

... To ja dałem ci link do githuba. Po prostu nie wiesz, jak wyczyścić pamięć podręczną pobierania przeglądarki. – Narf

0

Oprócz powyższej korekty, musiałem zmienić następujący wiersz:

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

Do:

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

nadzieję, że to pomaga, Pozdrawiam.

+0

Proszę zaktualizować odpowiedź, wyjaśnij, dlaczego Twój kod działa. –

+0

Dostarczona łatka nie respektuje prefiksu cookie. –

Powiązane problemy