0

感谢您查看我的问题。

编码:

$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 后如何取回数组?或者我错过了什么?

谢谢您的帮助。

4

5 回答 5

1

这段代码:

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

在浏览器刷新页面之前,您设置的 cookie 对代码不可用。

此外,如果您真的想这样做,请确保将校验和添加到基于服务器端机密的 cookie 和您保存到 cookie 中的数据内容。调查hash_hmac()。盲目地反序列化您从不受信任的来源收到的值是不负责任的。

于 2013-03-21T13:27:07.320 回答
1

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

放:

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

得到:

unserialize( base64_decode( $_COOKIE['name']) );
于 2013-07-10T08:46:17.263 回答
0

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

于 2013-03-21T13:22:48.687 回答
0

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

$_COOKIE['mycookie'] = $beforecookie;

就在这条线之后

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

您的 cookie 将立即可用 :-)

于 2013-03-21T13:58:09.827 回答
0

您只能更改这部分代码:

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

然后重新加载页面...

于 2013-03-21T13:25:41.960 回答