Как добавить / отредактировать куки в php? - PullRequest
1 голос
/ 06 августа 2010

Я использую следующие функции для установки массива значений в 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";
    }

Ответы [ 2 ]

2 голосов
/ 06 августа 2010

Одной вещью, которую вы должны рассмотреть, является serialize и unserialize для кодирования ваших данных cookie. Но будьте осторожны, исходя из моего опыта, вы должны использовать stripslashes для значения 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);
1 голос
/ 06 августа 2010

Я бы сохранил только идентификатор в куки и использовал бы плоский файл (ini, сериализованный или обычный текст) или базу данных для хранения значений.Дело в том, что cookie сильно ограничены в пространстве, и вы должны добавлять как можно меньше.В одном из моих последних проектов мне пришлось хранить много информации, и, поскольку у меня был доступ к дискам ssd, я помещал массивы и объекты, сериализованные в сжатые файлы, и в файлы cookie, сохранял идентификатор, а затем некоторые хэши различных частейданные, чтобы иметь возможность сделать некоторую быструю проверку.

И, с точки зрения безопасности, иметь только идентификатор (и хэш локальных данных, чтобы нельзя было легко изменить идентификатор или какую-либо другую форму проверки этого идентификатора) более безопасно, чемположить данные в куки.

Есть ли у вас особые причины для сохранения данных в виде файлов cookie?

...