1

我正在使用以下函数在 PHP 中的 cookie 中设置一组值,但我还需要一个“添加”和“编辑”函数 - 关于如何做到这一点的任何建议?

function build_cookie($var_array) {
  if (is_array($var_array)) {
    foreach ($var_array as $index => $data) {
      $out.= ($data!="") ? $index."=".$data."|" : "";
    }
  }
  return rtrim($out,"|");
}

function break_cookie ($cookie_string) {
  $array=explode("|",$cookie_string);
  foreach ($array as $i=>$stuff) {
    $stuff=explode("=",$stuff);
    $array[$stuff[0]]=$stuff[1];
    unset($array[$i]);
  }
  return $array;
}

用法:

setcookie("mycookies", build_cookie($cookies_array), time()+60*60*24*30);

$cookies_array2 = break_cookie(urldecode($_COOKIE['mycookies']));

    foreach ($cookies_array2 as $k => $v) {
        echo "$k : $v <br />\n";
    }
4

2 回答 2

2

您应该考虑使用的一件事是序列化反序列化来编码您的 cookie 数据。不过要小心,根据我的经验,在反序列化之前,您必须在 cookie 值上使用带斜杠。这样,您可以反序列化数据、更改值、重新序列化 cookie 并再次发送。如果您想存储更复杂的数据类型,序列化将在未来变得更容易。

例如:

setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30);

// This won't work until the next page reload, because $_COOKIE['mycookies']
// Will not be set until the headers are sent    
$cookie_data = unserialize(stripslashes($_COOKIE['mycookies']));
$cookie_data['foo'] = 'bar';
setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30);
于 2010-08-06T05:30:01.690 回答
1

我会在 cookie 中只存储一个 id 并使用平面文件(ini、序列化或纯文本)或数据库来存储值。问题是 - cookie 的空间非常有限,你应该尽可能少地添加。我的最新项目之一是我必须存储大量信息,因为我可以访问 ssd 驱动器,所以我将序列化的数组和对象放入压缩文件中,并在 cookie 中保存了 id,然后是 varios 部分的一些哈希值数据能够进行一些快速验证。

而且,从安全的角度来看,只有一个 id(以及本地数据的散列,因此无法轻易更改 id 或对该 id 进行某种其他形式的验证)比将数据放入 cookie 更安全.

您是否有任何特殊原因将数据保存为 cookie?

于 2010-08-06T05:50:02.513 回答