Я использую следующие функции для установки массива значений в cookie в PHP, но мне также нужна функция «добавить» и «изменить» – любые предложения о том, как я могу это сделать?
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"; }
Одна вещь, которую вы должны рассмотреть, – это сериализовать и unserialize для кодирования ваших файлов cookie. Просто будьте осторожны, хотя, по моему опыту, вы должны использовать stripslashes по значению cookie, прежде чем вы несериализуете его. Таким образом, вы можете неэтериализовать данные, изменить значения, повторно инициализировать файл 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);
Я бы сохранил только идентификатор в файле cookie и использовал плоский файл (ini, serialized или plain text) или базу данных для хранения значений. Дело в том, что файлы cookie сильно ограничены по пространству, и вы должны добавить как можно меньше. Один из моих последних проектов я должен был хранить много информации, и, поскольку у меня был доступ к SSD-дискам, я помещал массивы и объекты, сериализованные в zip-файлы, а в файлах cookie я сохранил идентификатор, а затем некоторые хэши различных частей данные, чтобы иметь возможность быстро выполнить проверку.
И с точки зрения безопасности, имея только идентификатор (и хэш локальных данных, так что вы не можете легко изменить идентификатор или какую-либо другую форму проверки этого идентификатора), более безопасно, чем помещать данные в файл cookie ,
Есть ли у вас какие-либо особые причины для сохранения данных в виде файлов cookie?