CodeIgniter 2.2.0 HMAC不匹配错误

时间:2014-06-09 13:49:59

标签: php codeigniter codeigniter-2 hmac

更新:即使在下载"固定" 2.2.0,更新日志文件仍然填满:

  

会话:HMAC不匹配。会话cookie数据与之不匹配   预期

从CodeIgniter 2.1.3升级到2.2.0后,我收到错误:

  

会话:HMAC不匹配。会话cookie数据与之不匹配   预期

启用Mcrypt扩展程序。如果我设置$ config [' sess_encrypt_cookie'] = FALSE; (不是生产选项)没有错误。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

重新下载CI 2.2存档,重新标记并替换。

答案 1 :(得分:3)

CI_Input-> _sanitize_globals()函数有时会破坏加密会话 为了解决这个问题,我更改了/system/core/Input.php(2.2版,第636行)

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

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

答案 2 :(得分:1)

在system / libraries / Sessions.php函数_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);
}

为:

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

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

看它是否有效。

请参阅:https://github.com/EllisLab/CodeIgniter/issues/3086

答案 3 :(得分:0)

除了上述修正,我还需要更改以下行:

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

要:

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

希望它有所帮助, 问候。