使用setcookie爆炸设置一个具有多个名称和值的cookie

时间:2012-12-05 12:43:53

标签: php cookies

我真的没有得到如何做到这一点

来自PHP Manual

  

Cookie名称可以设置为数组名称,并可供您使用   PHP脚本作为数组但单独的cookie存储在用户的脚本中   系统。

这对我来说没问题,我可以使用,如下所示

setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");

但是这种方法会创建多个cookie,这是我不想要的

PHP手册也说

  

考虑使用explode()设置一个具有多个名称的cookie   值。

但是我没有得到如何使用explode设置一个具有多个名称和值的cookie?

请有人解释一下。

但没有得到这个

3 个答案:

答案 0 :(得分:3)

Cookie只不过是一个愚蠢的键/值存储系统。就这么简单。

事实上,PHP提供了一个非常好的功能:当从PHP读取cookie时,名称包含所描述格式的方括号的cookie将组合成单个数组变量。但这是唯一的例外,它不会影响cookie的工作方式,正如您所说,它是您不需要的功能。

说,你只需要将cookie值视为白板,你可以放任何你想要的东西,只要它是文本。并且有许多PHP函数允许您将数组之类的奇怪内容转换为纯文本:

发挥你的想象力,你就完成了; - )

更新:有点评论 - 我已经提到了serialize()的完整性,但它可能不值得努力,因为确保你不打开它会非常复杂代码注入的大门。

答案 1 :(得分:-1)

您可以像这样设置一个cookie:

setcookie("cookiename", "value1;value2;value3;value4");

然后像这样使用爆炸:

$a = explode(';', $_COOKIE['cookiename']);

然后,您将从单个cookie中获取一组值。

它也说你不应该这样做......在文档的下一句中。

setcookie("cookiename", serialize( array("value1", "value2", "value3") );
// next request
$a = unserialize($_COOKIE['cookiename']);

因为这是不安全的,因为用户可以将其cookie修改为非数组值。

答案 2 :(得分:-1)

使用序列化和反序列化

前:

$ckArr= array();
        $ckArr['abc'] = "abc";
        $ckArr['xyz'] = "xyz";
        $ckArr['pqr'] = "pqr";

        $ckStr= serialize($ckArr);
        setcookie("mycookie", $ckStr, $time, $servername);

你可以使用:

取消序列化
$cookieContent = unserialize($_COOKIE['mycookie']);

print_r($cookieContent);