【问题标题】:setcookie() expects parameter 2 to be string, array what is the problem?setcookie() 期望参数 2 是字符串,数组有什么问题?
【发布时间】:2019-01-19 23:12:12
【问题描述】:

有什么问题?

while($rov = mysql_fetch_array($result)) {
    $expire = time()+(60*60*24*30);
    setcookie('cookie',$rov,$expire);
    $userID = $rov;
}

if(isset($_COOKIE['cookie'])) {
    $userID = $_COOKIE['ID'];
}

if(isset($_COOKIE['cookie'])) {}

错误信息:

警告:setcookie() 期望参数 2 是字符串,数组在 /index.php 第 24 行给出

【问题讨论】:

  • $rov 的值是多少?仅允许将字符串作为第二个参数。见php.net/manual/en/function.setcookie.php
  • mysql_fetch_array 返回一个数组而不是字符串。
  • 危险:您正在使用 an obsolete database API,它已从所有受支持的 PHP 版本中删除。您应该使用modern replacement 并升级到接收安全修复程序的 PHP 版本。
  • 很高兴收到警告。当您将数组转换为字符串时,您只会得到单词“Array”(literally),因此该错误不会被注意到。

标签: php cookies isset setcookie


【解决方案1】:

您收到警告

警告:setcookie() 期望参数 2 是字符串,数组在 /index.php 第 24 行

因为 PHP 的 setcookie() 函数接受 string 作为第二个参数。所以如果你想存储任何数组值,例如$rov,那么你可以使用json_encode($rev);来设置cookie,访问它你可以使用json_decode($_COOKIE['cookie'],1);

这是使用json_encode()json_decode()Array值设置和获取cookie的方法

设置 Cookie

setcookie('cookie', json_encode($rov), time()+3600);

获取 Cookie

$data = json_decode($_COOKIE['cookie'], true);

【讨论】:

  • 请附上 PHP 手册的链接。在这种情况下,JSON_ENCODE 也可以更好、更安全。
  • 是的,我知道,只是编辑我的答案。谢谢。提醒先生
【解决方案2】:

setCookie() 期望字符串作为值,但 $rov 变量包含导致错误的数组。

您可以使用@Curious_mind 建议的json_encode/json_decode 解决方案,也可以采用serialize/unserialize 方法。

setcookie('cookie', serialize($rov), time()+3600);

Then unserialize data:

$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多