【问题标题】:How to add / edit a cookie in php?如何在 php 中添加/编辑 cookie?
【发布时间】:2010-08-06 05:12:33
【问题描述】:

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

【问题讨论】:

    标签: php cookies setcookie


    【解决方案1】:

    您应该考虑使用serializeunserialize 对您的cookie 数据进行编码。不过要小心,根据我的经验,在反序列化之前,您必须在 cookie 值上使用 stripslashes。这样,您可以反序列化数据、更改值、重新序列化 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);
    

    【讨论】:

    • 这看起来更简单!顺便说一句,不是stripslashes(),不是strip_slashes()?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多