Intereting Posts
Могу ли я надежно полагаться на регистр имен столбцов в mysql? WordPress: показывать только будущие сообщения минус один день утечка памяти в скрипте php Переменная конкатенации PHP PHPExcel: чтение всех значений (дата, время, числа) в виде строк Конфигурация среды Laravel не загружается, сбой миграции – SQLSTATE Нет такого файла или каталога доступ к $ _SESSION при использовании file_get_contents в PHP Как я могу использовать буферизацию var_dump + output без ошибок памяти? PHP preg_match необходимо для обеспечения только одного символа пробела между словами Проверка имени пользователя php на базе данных, когда пользователь уже занят Извлечение изображений из файла Excel (xlsx) с помощью PHP Codeigniter: Столбец 'id' в порядке заказа неоднозначен Преобразование записи MySQL в строку JSON в PHP Извлечь первый URL-сегмент из полного URL-адреса Запуск javascript после x количество просмотров страниц

Что такое недокументированный SessionIdInterface в PHP 5.5?

В PHP 5.5.1 есть ссылка на SessionIdInterface. Однако это все еще недокументировано, и единственное, что я могу найти, это определение интерфейса:

interface SessionIdInterface { public function create_sid (); } 
  • Можно ли полагаться на этот интерфейс?
  • Где я могу найти документацию относительно этого интерфейса?

SessionIdInterface был создан как часть запроса 109 запроса php-src и помещен в PHP 5.5.1. Здесь обсуждаются некоторые подробности.

Короче говоря, ваша реализация SessionHandlerInterface также может реализовать SessionIdInterface и предоставить метод create_sid который возвращает строку. PHP автоматически вызовет create_sid вместо использования внутренних функций создания сеанса, определенных в php.ini.

Вот пример скрипта, который демонстрирует использование.

 <?php class SillySessionHandler implements SessionHandlerInterface, SessionIdInterface { static $lol_sessions = []; public function open($save_path, $filename) { return true; } public function close() { return true; } public function destroy($session_id) { return true; } public function gc($lifetime) { return true; } public function read($session_id) { return array_key_exists($session_id, static::$lol_sessions) ? static::$lol_sessions[$session_id] : null; } public function write($session_id, $session_data) { static::$lol_sessions[$session_id] = $session_data; echo "Session data: ", $session_data; } public function create_sid() { $sid = bin2hex(openssl_random_pseudo_bytes(16)); static::$lol_sessions[$sid] = []; return $sid; } } $handler = new SillySessionHandler; session_set_save_handler($handler, true); session_start(); echo "Your session ID is ", session_id(), "<hr>"; $_SESSION['foo'] = 'bar'; 

Пример вывода:

Идентификатор сеанса: 2e837e0c5f5ac1b23296d384a9aab2af


Данные сеанса: foo | s: 3: «bar»;

Согласно исходному коду PHP:

 /* {{{ SessionIdInterface functions[] */ static const zend_function_entry php_session_id_iface_functions[] = { PHP_ABSTRACT_ME(SessionIdInterface, create_sid, arginfo_session_class_create_sid) { NULL, NULL, NULL } }; /* }}} */ /* {{{ SessionHandler functions[] */ static const zend_function_entry php_session_class_functions[] = { PHP_ME(SessionHandler, open, arginfo_session_class_open, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, close, arginfo_session_class_close, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, read, arginfo_session_class_read, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, write, arginfo_session_class_write, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, destroy, arginfo_session_class_destroy, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, gc, arginfo_session_class_gc, ZEND_ACC_PUBLIC) PHP_ME(SessionHandler, create_sid, arginfo_session_class_create_sid, ZEND_ACC_PUBLIC) { NULL, NULL, NULL } }; 

В SessionIdInterface нет никаких других методов, и create_sid в этом интерфейсе одинаково с SessionHandler