我正在使用以下函数在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";
}
答案 0 :(得分:2)
您应该考虑使用的一件事是serialize和unserialize来编码您的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?