如何将Cookie放入数组


how to put a Cookie into an array?

我试图为cookie存储一个数组,但我得到了以下错误:

警告:setcookie()要求参数2为字符串,给定数组

我怎样才能真正将数组放入cookie?

第二版:我编辑了代码,现在确实存储了cookie数组,但我遇到了一个巨大的问题。如果第二个数组的大小较小,它不会覆盖第一次提交的值。

示例。第一提交数组[12060402]、第二提交数组[0402]。但是结果是[04020402],这是错误的。

function cuukko($var,$val){
    setcookie($var,$val,time()+60*60*24*365);
}
function preg_DW($var){
    global $isset;
    if ($isset&&is_array($_POST[$var])&&sizeof($_POST[$var])>0){
        $C=0;
        foreach ($_POST[$var] as $key => $value) {
            $val[$C]=trim(preg_replace('/'s's+/',' ',preg_replace('/[^'d'w's'(')'[']]+/','',$value)));
            cuukko($var."[".$C."]",$val[$C]);
            $C++;
        }
    } elseif (isset($_COOKIE[$var])) $val=$_COOKIE[$var];
        return (sizeof($val)>0)?$val:array();
}

编辑3:问题已经解决。现在使用的代码:

function cuukko($var,$val){
    setcookie($var,$val,time()+60*60*24*365);
}
function preg_DW($var){
    global $isset;
    if ($isset){
        $C=0;
        if (is_array($_COOKIE[$var]))
        foreach($_COOKIE[$var] as $key =>$trash)
        setcookie("{$var}[".$key.']', '', time()-60*60*24*365);
        if (is_array($_POST[$var]))
        foreach ($_POST[$var] as $key => $value) {
            $val[$C]=trim(preg_replace('/'s's+/',' ',preg_replace('/[^'d'w's'(')'[']]+/','',$value)));
            cuukko($var."[".$C."]",$val[$C]);
            $C++;
        }
    } elseif (isset($_COOKIE[$var])) $val=$_COOKIE[$var];
        return (sizeof($val)>0)?$val:array();
}

答案

您可以使用数组语法存储cookie,并将其作为多维数组读取:

setcookie('array[key]', 'value');
$var = $_COOKIE['array']['key'];

你的代码看起来是这样的:

for($val as $key=>$value)
  setcookie('vals['.$key.']', $value, time()+60*60*24*365);


多维阵列

您也可以以相同的方式存储多维数组:

setcookie('array[key1][key2]', 'value');
$var = $_COOKIE['array']['key1']['key2'];


清除Cookie

当你需要清除cookie时,有多种方法;最长的是:

for($_COOKIE['array'] as $key=>$value)
  setcookie('array['.$key.']', '', time()-60*60*24*365);

最简单也是最可取的方法是:

setcookie('array', '', time()-60*60*24*365);


结论

Cookie允许使用标准数组语法存储数组。存储多维数组也是标准语法。

要销毁具有数组值的cookie,请在整个数组或每个特定元素上使用与普通cookie相同的语法。

关于setcookie()的文档对此进行了详细介绍。

另一种解决方案是使用serialize()和unserialize将cookie数据存储在一个cookie或json_encode()中。尽管标准数组语法的行为类似于数组,但您实际上是在设置多个cookie以使其工作,这似乎有点浪费。因此,使用PHP文档自己的示例

// set the cookies
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");
//On next pageload $_COOKIE['cookie'] = array ('one' => 'cookieone', 'two'=>'cookietwo', 'three' => 'cookiethree');

您刚刚设置了3个cookie。

$array = array('value1', 'value2', 'value3');
setcookie('cookie', serialize($array);
//On next pageload
$array = unserialize($_COOKIE['cookie']);

您设置了一个cookie,而不是三个具有相同数据的cookie。