2010-08-06 2 views
1

Я использую следующие функции для установки массива значений в cookie в PHP, но мне также нужна функция «добавить» и «отредактировать» - любые предложения о том, как я могу это сделать?Как добавить/отредактировать файл 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

Одна вещь, которую вы должны рассмотреть возможность использования является serialize и unserialize кодировать данные печенья. Просто будьте осторожны, по моему опыту, вы должны использовать 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); 
+0

Это выглядит проще! Btw, разве это не stripslashes(), а не strip_slashes()? – DrMHC

1

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

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

У вас есть особые причины для сохранения данных в виде куки?

Смежные вопросы