我试图以序列化的方式将数组保存到cookie中。所以我要做的是:
$serial_auth = serialize($_SESSION['auth']);
setcookie("auth_cookie", $serial_auth , 2592000 + time());
在下一页中,我尝试这样使用这些数据:
if(isset($_COOKIE['auth_cookie']))
{
$_SESSION['auth'] = unserialize($_COOKIE['auth_cookie']); //but it returns an empty array.
}
现在奇怪的是整个事情在我的本地主机工作,但它不工作在000webhost网站。
和注意:当我尝试回显它们时,我得到这个:
$_SESSION['auth'] =
Array ( [status] => ok [userid] => 1 [username] => user11 [visiblename] => user11 )
SERIALIZED =
a:4:{s:6:"status";s:2:"ok";s:6:"userid";s:1:"1";s:8:"username";s:6:"user11";s:11:"visiblename";s:6:"user11";}
这可能是一个PHP配置问题,但我想知道是否有一种方法可以做到这一点,而不改变任何PHP配置。谢谢你的帮助。
这有严重的安全缺陷,不应该这样做。
攻击者可以将cookie值设置为任何值,包括序列化对象。这些对象在重新创建时可以执行代码。因此,攻击者可以通过向您发送精心制作的序列化字符串在您的机器上执行代码!我们不能希望攻击者能够做到这一点。
见本页底部的警告:http://www.php.net/manual/en/function.unserialize.php
第二件事是:为什么你需要在一个单独的cookie认证信息,什么与它连接?如果攻击者更改了任何值,特别是userid或状态,他能做什么?我想他可能会得到他不应该得到的东西。