Сохранение объекта в сеансе. Как извлечь объект из сеанса, как это было раньше?

Я сохраняю класс клиента с некоторыми переменными и методами в сеансе.

Как мне заставить все его методы работать при извлечении его из сеанса? (Как точный оригинал, если это возможно)

Это то, что я сделал до сих пор:

<?php
namespace MyApp\Models;
use MyApp\Core\Database;
use MyApp\Helpers\Session;
use MyApp\Core\Config;

class Customer {

private $db;

public $host;

public $dbName;

public $type;


public function __construct($customerName = NULL)
{
# Get database instance
$this->db = Database::getInstance();

# If customer name passed as a variable
if ( $customerName ) {

# Get Customer data from db
$data = $this->customerDataByName($customerName);

if ($data) {
# Set data to $this Obj
$this->setCustomerData($data['db_host'], $data['db_name'], $data['system_type']);
# Set $this Obj to Session
$this->setCustomerToSession();
} else {
return false;
}
}
}


public function setCustomerData($host, $dbName, $type)
{
# Set customer host in object
$this->host     = $host;
# Set customer name in object
$this->dbName   = $dbName;
# Set customer type in object
$this->type     = $type;
}


public function setCustomerToSession()
{
Session::put(Config::$customer, $this);
}


public function customerDataByName($customer_name)
{
return $this->db->row("SELECT `db_name`, `db_host`, `system_type` FROM customers WHERE customer_name = :customer_name", array('customer_name' => $customer_name));
}



public function __sleep()
{
return array('host', 'dbName', 'type', 'customerDataByName()', 'setCustomerData()' );
}

public function __wakeup()
{
$this->db = Database::getInstance();
}

}

«Host», «dbName» и «type» восстанавливаются должным образом с помощью __sleep() метод, я попытался добавить функции несколькими различными способами, но безуспешно. Я хотел бы, чтобы он также мог подключаться к базе данных.

А также попробовал использовать другой метод:

public function setCustomerToSession()
{
$serialized = serialize($this);
Session::put(Config::$customer, $serialized);
}

Без __wakup а также __sleepПотом попробовал:

$a = unserialize($_SESSION['customer']);
var_dump($a);

и получил эту ошибку:

Неустранимая ошибка PHP: Uncaught PDOException: Вы не можете сериализовать или
десериализовать экземпляры PDO в …

Указывая на линию $serialized = serialize($this);

-1

Решение

Вы должны использовать функцию serialize() возвращает строку, содержащую представление значения в байтовом потоке, в обратном порядке вы можете использовать unserialize(), Потому что вы не можете хранить объект в PHP SESSION,

Код должен быть,

session_start();

$a = your_object;
$b = serialize($a);

$_SESSION["serialized_data"] = $b;
# To store in Session

$unserialized_data = unserialize($_SESSION["serialized_data"]);
# To get from Session as Object
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]