Я начинаю учебу в PHP, и у меня возникают проблемы с приложением: мне нужно поместить информацию о объекте в PHP для файла cookie, а затем получить cookie для повторного объекта на другой странице. У кого-нибудь есть решение этой проблемы?
Информация, которую я хочу сохранить в cookie, – это просто некоторая информация, предпочтительно Customer, как цвет фона, размер окон.
<?php class Client { private $id; private $pSize; private $color; function __construct($id) { $this->id = $id; } public function getPSize() { return $this->pSize; } public function setPSize($pSize) { $this->pSize = $pSize; } public function getColor() { return $this->color; } public function setColor($color) { $this->color = $color; } } ?>
На странице index.php у меня есть:
<?php include_once 'Client.class.php'; //Test Preference Client $client = new Client(1); $client->setColor("#000000"); $client->setPSize(200); //using Serialize to put to Cookie $StringClient = serialize($client); //Store to Cookie $_COOKIE['PreferenceClient'] = $StringClient;
?>
На другой странице я получаю inrofmation:
if(isset($_COOKIE['PreferenceClient'])){ // Unsing Unserialize to Object $objClient = unserialize($_COOKIE['PreferenceClient']); //Test data: echo $objClient->getColor(); //Continue with Performing changes to the client if the information exists... }
Я решил проблему. Спасибо всем, кто помог. прежде чем я попытался получить информацию о файлах cookie без сериализации ребята, это мой первый пост, я прошу прощения, если я сделал что-то не так. Я должен что-то сделать для вас?
Вы можете хранить объекты в строке (например, cookie) с помощью сериализации, unserialize.
setcookie ($name, serialize($object)); // set object $object = unserialize($_COOKIE[$name]); // get object
Но помните, что использование этого подхода может быть опасным. Инъекция объектов PHP
Вы можете использовать json
вместо serialization
для хранения stdClass
, это было бы достаточно безопасно.
setcookie ($name, json_encode($object)); // set object stdClass $object = json_decode($_COOKIE[$name]); // get object stdClass
Но он предпочитает использовать сеанс для хранения ваших данных. Вы даже можете хранить объект без вызова serialize, unserialize. Но __sleep
, __wakeup
magic все еще работает.
setcookie , $ _COOKIE , сериализация , магия с сериализацией .
Ответ таков: вы этого не делаете.
Всякий раз, когда вы берете данные у клиента и используете его в своем коде, вы должны реализовать безопасность, которая предотвращает случай, когда пользователь изменяет свои данные клиента и вводит что-то неожиданное на ваш сервер. Клиент легко может подделывать и изменять данные cookie и, таким образом, изменять свой объект.
Пример:
Если мы сериализуем объект из ответа Alma Do и сохраняем значения в файле cookie, клиент / пользователь может видеть наши настройки базы данных с помощью
public function __sleep() { return array('server', 'username', 'password', 'db'); }
Теперь клиент может изменить свой файл cookie для использования поддельного сервера вместо вашего сервера, подделать вашу таблицу входа / пользователя и притвориться администратором.
Я думаю, что это случай проблемы XY , пожалуйста, сообщите нам, что именно ваша цель.
Это звучит больше, чем функция сеанса. Вы не должны передавать данные через Cookie. В Cookies вы сохраняете только краткую информацию, такую как токен сеанса или хэш или некоторые настройки. Для передачи и хранения данных функция сеанса PHP намного лучше.
http://www.php.net/manual/de/book.session.php
В вашей сессии вы можете сериализовать некоторые данные, если хотите, или сохранить только массив или значение.
session_start(); // on every page $_SESSION['test'] = "123123"; echo $_SESSION['test'];
для отправки сериализованного объекта вы должны использовать определенную вещь, такую как time()
чтобы обходить SPAM
и контролировать timeOut!
session_start(); setcookie('myobject',serialize("Myvalue"),(time()+(3600*24*30)));
не забудьте сохранить в сеансе:
unset($_SESSION['myobject']);
Сохраните свой объект
$_SESSION['myobject'] = unserialize($_COOKIE['myobject']);
Восстановите свой Obecjt:
$mySeriaLizedObject = $_SESSION['myobject'];