如何在php中添加/编辑cookie?

时间:2010-08-06 05:12:34

标签: php cookies setcookie

我正在使用以下函数在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";
    }

2 个答案:

答案 0 :(得分:2)

您应该考虑使用的一件事是serializeunserialize来编码您的Cookie数据。但请注意,根据我的经验,在对其进行反序列化之前,必须在cookie值上使用stripslashes。这样,您可以反序列化数据,更改值,重新序列化cookie并再次发送。如果您想存储更复杂的数据类型,Serialize将来会更容易。

例如:

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);

答案 1 :(得分:1)

我只在cookie中存储一个id并使用平面文件(ini,序列化或纯文本)或数据库来存储值。事情是 - cookie严格限制空间,你应该尽可能少添加。我最近的一个项目我必须存储大量的信息,因为我可以访问ssd驱动器,我把数组和对象序列化为压缩文件和cookie我保存了id,然后是一些varios部分的哈希数据能够做一些快速验证。

而且,从安全的角度来看,只拥有一个id(以及本地数据的哈希值,因此无法轻易更改id或该ID的其他形式的验证)比将数据放入cookie更安全。

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