我有一个像这样的数组
$ value = {array('id'=> $ id,'email'=> $ email,'token'=> $ token)}
我想对数组进行字符串化然后编码然后将其存储在cookie“login”中。你是怎样做的 ?另请告诉我如何解码和读取存储的值。
编辑:
我一直在尝试序列化/反序列化,但它没有按预期工作。例如,
$value = serialize(array('id'=>33, 'email'=>'big@gmail.com', 'token'=>'e9aa0966773d68e0fbf9cb21fc2877b4'));
echo $value; //a:3:{s:2:"id";i:33;s:5:"email";s:20:"big@gmail.com";s:5:"token";s:32:"e9aa0966773d68e0fbf9cb21fc2877b4";}
但是当值转到cookie时,它看起来像这样
a%3A3%3A%7Bs%3A2%3A%22id%22%3Bs%3A1%3A%226%22%3Bs%3A5%3A%22email%22%3Bs%3A20%3A%22craigcosmo%40gmail.com%22%3Bs%3A5%3A%22token%22%3Bs%3A32%3A%22e9aa0966773d68e0fbf9cb21fc2877b4%22%3B%7D
答案 0 :(得分:13)
$_COOKIE['login'] = json_encode($array);
$array = json_decode($_COOKIE['login']);
还可以使用serialize / unserialize:
$_COOKIE['login'] = serialize($array);
$array = unserialize($_COOKIE['login']);
也许
<强>更新强>
使用此代码:
<html><body><pre><?php
$array = Array(
'id' => 1234,
'email' => 'example@example.com',
'token' => base64_encode('abcDEF1234')
);
echo "Var Dump (initial):\r\n";
var_dump($array);
$serialized = serialize($array);
echo "Serialized:\r\n".$serialized."\r\n";
$unserialized = unserialize($serialized);
echo "Unserialized:\r\n".$unserailized."\r\n";
var_dump($unserialized);
?></pre></body></html>
您将生成以下内容:
Var Dump (initial):
array(3) {
["id"]=>
int(1234)
["email"]=>
string(19) "example@example.com"
["token"]=>
string(16) "YWJjREVGMTIzNA=="
}
Serialized:
a:3:{s:2:"id";i:1234;s:5:"email";s:19:"example@example.com";s:5:"token";s:16:"YWJjREVGMTIzNA==";}
Unserialized:
array(3) {
["id"]=>
int(1234)
["email"]=>
string(19) "example@example.com"
["token"]=>
string(16) "YWJjREVGMTIzNA=="
}
<强> EDIT2 强>
您将看到基于HTTP协议传输Cookie的编码值。 Cookie转移中有两个标头:Set-Cookie
&amp; Cookie
。一个是服务器 - >客户端,另一个是客户端 - >服务器,尊重。
当PHP设置cookie时(使用setcookie),PHP实际上只是简短地处理以下内容:
setcookie('login',$serialized);
,在PHP中转换为:
header('Set-Cookie: login='.urlencode($serialized).'; '
.'expires=Wed, 12-Jan-2011 13:15:00 GMT; '
.'path=/; domain=.mydomain.com');
如果你有像:
或SPACE这样的字符,浏览器就不知道cookie的属性开始和结束的位置。
答案 1 :(得分:10)
有一个serialize / unserialize函数可以将数组转换为字符串并返回。
编辑: 当您将字符串存储到cookie(setcookie)时,php需要对字符串执行url编码。这可以防止保存到cookie的字符串中的任何字符干扰任何其他标头。当接下来加载页面时,php获取cookie并自动对cookie值进行url解码,以将其返回到之前的值。至于存储在cookie中的内容,这在php中无关紧要,因为php会自动执行url编码/解码。现在,如果您使用其他语言(如javascript)获取cookie,那么是的,您将获得原始字符串。在这种情况下,您可以在JS中使用类似decodeURI的内容来获取原始值。