更新:即使在下载"固定" 2.2.0,更新日志文件仍然填满:
会话:HMAC不匹配。会话cookie数据与之不匹配 预期
从CodeIgniter 2.1.3升级到2.2.0后,我收到错误:
会话:HMAC不匹配。会话cookie数据与之不匹配 预期
启用Mcrypt扩展程序。如果我设置$ config [' sess_encrypt_cookie'] = FALSE; (不是生产选项)没有错误。非常感谢任何帮助。
答案 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);
看它是否有效。
答案 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'))
希望它有所帮助, 问候。