Я получил такой массив
$ value = {array ('id' => $ id, 'email' => $ email, 'token' => $ token)}
Я хочу, чтобы строка массива затем закодировать, а затем сохранить его в cookie «login». Как ты это делаешь ? Также, пожалуйста, скажите мне, как декодировать и читать сохраненное значение.
Редактировать:
Я пытался сериализовать / unserialize, но он не работал должным образом. например,
$value = serialize(array('id'=>33, 'email'=>'big@gmail.com', 'token'=>'e9aa0966773d68e0fbf9cb21fc2877b4')); echo $value; //a:3:{s:2:"id";i:33;s:5:"email";s:20:"big@gmail.com";s:5:"token";s:32:"e9aa0966773d68e0fbf9cb21fc2877b4";}
Но когда значение переходит к файлу cookie, оно выглядит так:
a%3A3%3A%7Bs%3A2%3A%22id%22%3Bs%3A1%3A%226%22%3Bs%3A5%3A%22email%22%3Bs%3A20%3A%22craigcosmo%40gmail.com%22%3Bs%3A5%3A%22token%22%3Bs%3A32%3A%22e9aa0966773d68e0fbf9cb21fc2877b4%22%3B%7D
существует функция serialize / unserialize для преобразования массива в строку и обратно.
Редактирование. Когда вы храните строку в cookie ( setcookie ), php необходимо выполнить кодировку url в строке. Это предотвращает любые символы в строке, сохраненной в cookie, мешающую другим заголовкам. Когда страница загружается следующей, php получает файл cookie и автоматически расшифровывает URL-адрес в файле cookie, чтобы вернуть его в прежнее значение. Что касается того, что хранится в файле cookie, это не должно иметь значения в php, потому что php будет автоматически кодировать / декодировать url. Теперь, если вы получаете cookie на другом языке, таком как javascript, тогда да, вы получите исходную строку. В этом случае вы можете использовать что-то вроде decodeURI в JS, чтобы вернуть исходное значение.
json_encode / json_decode
$_COOKIE['login'] = json_encode($array); $array = json_decode($_COOKIE['login']);
Можно также использовать serialize / unserialize :
$_COOKIE['login'] = serialize($array); $array = unserialize($_COOKIE['login']);
Может быть.
ОБНОВИТЬ
С помощью этого кода:
<html><body><pre><?php $array = Array( 'id' => 1234, 'email' => 'example@example.com', 'token' => base64_encode('abcDEF1234') ); echo "Var Dump (initial):\r\n"; var_dump($array); $serialized = serialize($array); echo "Serialized:\r\n".$serialized."\r\n"; $unserialized = unserialize($serialized); echo "Unserialized:\r\n".$unserailized."\r\n"; var_dump($unserialized); ?></pre></body></html>
Вы создадите следующее:
Var Dump (initial): array(3) { ["id"]=> int(1234) ["email"]=> string(19) "example@example.com" ["token"]=> string(16) "YWJjREVGMTIzNA==" } Serialized: a:3:{s:2:"id";i:1234;s:5:"email";s:19:"example@example.com";s:5:"token";s:16:"YWJjREVGMTIzNA==";} Unserialized: array(3) { ["id"]=> int(1234) ["email"]=> string(19) "example@example.com" ["token"]=> string(16) "YWJjREVGMTIzNA==" }
EDIT2
Вы видите кодированное значение, основанное на том, как HTTP-протокол передает файлы cookie. В передаче файлов cookie есть два заголовка: Set-Cookie
& Cookie
. Один из них – сервер-> клиент, другой – клиент-> сервер, с уважением.
Когда PHP устанавливает cookie (например, с помощью setcookie), PHP действительно просто выполняет следующие действия:
setcookie('login',$serialized);
который в PHP переводит на:
header('Set-Cookie: login='.urlencode($serialized).'; ' .'expires=Wed, 12-Jan-2011 13:15:00 GMT; ' .'path=/; domain=.mydomain.com');
Если у вас были такие символы, как :
или SPACE, браузер не знал бы, где начинаются и заканчиваются свойства файла cookie.