它必须这样做,因为 cookie_data是序列化数组,因为正常的字符串值可以正常工作。
它实际上来自一个codeigniter类,但它不起作用? 有谁知道问题可能是什么?
$hash = substr($session, strlen($session)-32);
$session= substr($session, 0, strlen($session)-32);
if ($hash !== md5($session.$this->encrypt_key))
{........
并且cookie值像这样加密
$cookie_data = $cookie_data.md5($cookie_data.$this->encrypt_key);
修改 我发现答案是在创建和验证的过程中使用 urlencode en urldecode md5哈希,因为setcookie自动执行urlencode,从而可能更改哈希值。
谢谢,理查德答案 0 :(得分:4)
你有一个错字:
md5($sessie.$this->encrypt_key))
应该是
md5($session.$this->encrypt_key))
如果你在开启通知的情况下发展,你就会更容易发现这种事情。
您不是加密您的数据,而是签署。
答案 1 :(得分:2)
md5是单向函数。它不是可逆的,因此您无法解密数据。
您唯一能做的就是加密原始数据(如果您将其保存在别处)并检查第二次计算的结果。
如果检索到的值和计算的新值相同,则您收到的哈希值是有效的(正如您在代码中所做的那样)。
修改强>
你知道,只有三行代码我会猜到一些可能的原因:
对我来说,第一个案例是更可能的。我能看到的。
答案 2 :(得分:1)