Вы идете об этом неправильно. Не изобретайте колесо, пытаясь вручную получить -> сериализовать и десериализовать -> установить данные сеанса
Вместо этого создайте новый обработчик сеанса, который будет выполнять работу базы данных за вас. Сериализация / десериализация также обрабатывается для вас - вам не нужно явно вызывать эти функции. Кроме того, не используя установленный механизм для этого процесса, вы упускаете некоторые функциональные возможности (такие как сборщик мусора сеанса)
Но прежде чем сделать это, давайте создадим таблицу базы данных, которая будет действовать как наше хранилище сеансов
CREATE TABLE IF NOT EXISTS `user_session` (
`user_session_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`sess_id` VARCHAR(64) NOT NULL ,
`sess_data` TEXT NOT NULL ,
`sess_time` INT UNSIGNED NOT NULL ,
PRIMARY KEY (`user_session_id`) ,
INDEX `idx_sess_id` (`sess_id` ASC) ,
INDEX `idx_sess_time` (`sess_time` ASC) )
ENGINE = InnoDB;
Далее следует создать класс с нужными нам методами. Я не собираюсь заполнять их все - это упражнение для вас;)
class MysqlSessionHandler
{
protected $db;
public function __construct( $db )
{
$this->db = $db
}
public function open()
{
}
public function close()
{
}
public function read()
{
}
public function write()
{
}
public function destroy()
{
}
public function gc()
{
}
public function register()
{
return session_set_save_handler(
array( $this, 'open' )
, array( $this, 'close' )
, array( $this, 'read' )
, array( $this, 'write' )
, array( $this, 'destroy' )
, array( $this, 'gc' )
);
}
}
И основное использование будет
$sessionHandler = new MysqlSessionHandler( $db );
$sessionHandler->register();
И, наконец, вы всегда можете получить идентификатор текущей сессии, просто вызвав session_id ()