setcookie没有使用$ value参数的字符串数组

时间:2012-05-19 13:17:20

标签: php arrays arguments argument-passing setcookie

我正在尝试这样做:

setCookie('visitor', array(0 => 'one', 1 => 'two'), time()+3600, COOKIEPATH, COOKIE_DOMAIN, false);

但我无法让它发挥作用。 php参考解释“$ value as string [optional]”(据我所知)应该接受一个字符串数组作为参数。如果我对php参考(字符串[可选])的理解错误,请帮助我实现与此类似的东西或纠正我。

这是setcookie函数声明:

setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);

2 个答案:

答案 0 :(得分:4)

改为使用serialize(array(0 => 'one', 1 => 'two'))

再次检索数组时使用unserialize()

并且没有:如果php手册说函数想要一个字符串......那么它们意味着一个字符串。不是字符串数组。

也许你被[可选]愚弄了?方括号没有任何意义。整个“[可选]”只是意味着可以在没有此参数的情况下调用该函数。

答案 1 :(得分:1)

如果setcookie()函数确实允许你重载类型,它会通过将数组传递给循环来实现。由于它不支持数组,我在函数外部使用foreach循环。

foreach (array(0 => 'one', 1 => 'two') as $key => $value) {
    setcookie('visitor[' . $key . ']', $value, time()+3600, COOKIEPATH, COOKIE_DOMAIN, false);
)

var_dump($_COOKIE);

这导致......

array(1) {
    ["visitor"]=>
    array(2) {
        [0]=>
        string(3) "one"
        [1]=>
        string(3) "two"
    }
}