反序列化cookie变量

时间:2013-03-21 13:19:25

标签: php arrays serialization cookies setcookie

感谢您查看我的问题。

代码:

$array = array("zero","one","true","three");
echo $beforecookie = serialize($array); //<<-- IT WORKS;
print_r(unserialize($beforecookie)); //<<--IT WORKS

setcookie('mycookie', $beforecookie, time()+3600);
echo $aftercookie = $_COOKIE['mycookie']; // <<-- it works perfectly same with $beforecookie

$data = unserialize($aftercookie);
print_r($data); //<<--RETURN NOTHING (the problem)
var_dump($data); //<<-- RETURN bool(false);

我从cookie中获取的字符串(从数组序列化)无法反序列化;为什么?如何在使用serialize()将数组设置为cookie后将其返回?或者我错过了什么?

感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

这段代码:

setcookie('mycookie', $beforecookie, time()+3600);
echo $aftercookie = $_COOKIE['mycookie'] // <<-- it works perfectly same with $beforecookie

在浏览器刷新页面之前,您设置的cookie将无法用于代码。

此外,如果您确实想要这样做,请确保向cookie添加校验和,该校验和基于服务器端密钥以及您要保存到cookie中的数据内容。查看hash_hmac()。盲目地反序列化从不受信任来源获得的值是不负责任的。

答案 1 :(得分:1)

需要在功能base64_encode()之后使用serialize()

组:

setcookie('name', base64_encode( serialize( $arr ) ) );

得到:

unserialize( base64_decode( $_COOKIE['name']) );

答案 2 :(得分:0)

Cookie在脚本执行后设置以及标题,因此您无法在重新加载页面之前访问它。

答案 3 :(得分:0)

您只能更改代码的这一部分:

if(!$_COOKIE['mycookie']){
setcookie('mycookie', $beforecookie, time()+3600);
}

然后重新加载页面......

答案 4 :(得分:0)

如果你想让你的cookie立即可用(而不是像其他人说的那样在页面刷新之后),只需添加

$_COOKIE['mycookie'] = $beforecookie;

此行之后

setcookie('mycookie', $beforecookie, time()+3600);

您的Cookie将立即可用: - )