感谢您查看我的问题。
代码:
$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后将其返回?或者我错过了什么?
感谢您的帮助。
答案 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将立即可用: - )