4

我真的不知道该怎么做

来自PHP 手册

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

这对我来说没问题,我得到并且可以像下面这样使用

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

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

PHP手册还说

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

但我不知道如何使用explode 设置一个具有多个名称和值的cookie?

请有人解释一下。

但没有得到这个

4

3 回答 3

3

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

碰巧 PHP 在此之上提供了一个漂亮的功能:名称包含所描述格式的方括号的 cookie 将在从 PHP 读取 cookie 时组合成单个数组变量。但这是唯一的例外,它不会影响 cookie 的工作方式,而且正如您所说,这是您不需要的功能。

也就是说,您只需将 cookie 值视为白板,您可以在其中放置任何您想要的内容,只要是文本即可。并且有许多 PHP 函数可以让您将数组等奇特的东西转换为纯文本:

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

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

于 2012-12-05T13:10:49.657 回答
-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 修改为非数组值。

于 2012-12-05T12:47:50.260 回答
-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);
于 2012-12-05T12:51:21.400 回答