【问题标题】:setcookie not working with an array of string for $value argumentsetcookie 不适用于 $value 参数的字符串数组
【发布时间】:2012-05-26 18:54:08
【问题描述】:

我正在尝试这样做:

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

但我无法让它工作。 php 参考解释了“$value as string[optional]”(据我的理解)应该接受一个字符串数组作为参数。如果我对 php 参考 ( string[optional] ) 的理解有误,请帮助我实现类似的目标或纠正我。

这里是 setcookie 函数声明:

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

【问题讨论】:

  • Cookie 值必须是字符串。将您的数据打包成一个字符串,例如使用json_encode
  • 考虑将此数据存储在您的会话或数据库中。 Cookie 应仅用作密钥容器(会话文件或数据库条目)。

标签: php arrays arguments argument-passing setcookie


【解决方案1】:

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

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

不:如果 php 手册说函数需要一个字符串......那么他们的意思是一个字符串。不是字符串数组。

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

【讨论】:

  • 好的,这件事奏效了。但是你能解释一下这个字符串[可选]表示法是什么意思吗?我应该如何在 php 中将数组作为参数传递?
  • 第一个问题:添加到我的答案中。第二个问题:你的做法是完全正确的 setCookie 会接受一个数组。只是这个函数不接受数组。
  • 好吧。如果引用说 string[] 怎么办?这意味着我可以传递一个字符串数组。对吗???
  • @Spoilt:php 的指定方式实际上是只写“数组”,而不是指定数组中元素的类型。
  • @Spoilt:不,只是简单的“数组”。检查例如:de3.php.net/manual/en/function.http-build-str.php。第一个参数需要是一个字符串数组。文字参数说明告诉你。但是在规范行中它只是说简单的“数组”。
【解决方案2】:

如果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"
    }
}

【讨论】:

  • 您必须小心 $key 不包含 ] 或其他可能破坏它的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2013-09-14
  • 2014-07-13
相关资源
最近更新 更多