Объект для Cookie в PHP

Я начинаю учебу в 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'];