Итак, у меня есть класс SessionHandler и другой мой файл, который приводит это в движение следующим образом (cfg_session.php):
use \Classes\MySessionHandler as Sessao;
$sessao = new Sessao();
// PHP < 5.4
session_set_save_handler(
array($sessao, 'open'),
array($sessao, 'close'),
array($sessao, 'read'),
array($sessao, 'write'),
array($sessao, 'destroy'),
array($sessao, 'gc')
);
register_shutdown_function('session_write_close');
session_start();
Хорошо, небольшая разница в том, что в моей локальной сети я использую:
session_set_save_handler($sessao)
Потому что в моей локальной сети это PHP> 5.5.
Он отлично работает на моем локальном вебе, я обновляю страницу, выходу из системы, входу в систему, закрытию вкладок, открытию вкладок, повторному входу в систему, и все нормально, PHPSESSID из моего браузера равен идентификатору, созданному в файле сеанса, и т.д. на.
РЕДАКТИРОВАТЬ: У меня есть сервер с PHP < 5.4, и я на самом деле, используя приведенный выше код, предназначенный для PHP < 5.4, но все еще ведет себя странно. Обновляет браузер, создает другой файл сеанса, но не меняет PHPSESSID. В первый раз, когда я пытаюсь войти в систему, процесс выглядит следующим образом: он создает файл сеанса, я перенаправляю пользователя на определенную страницу, которая выполняет другой запрос на сервере, он просто создает другой файл сеанса, полностью отличающийся от PHPSESSID, и, конечно, , приложение выводит меня из системы. Это странная часть.
Но затем я пытаюсь войти снова нормально, и он входит в систему, просто отлично. Каждый запрос имеет одинаковый идентификатор, session_regenerate_id () работает нормально, все идет хорошо, PHPSESSID соответствует созданному файлу сеанса.
Но затем, если я выхожу из системы, закрываю эту вкладку, открываю новую вкладку и пытаюсь войти (или просто закрываю вкладки, не выходя из системы), он просто делает то же самое: входит в систему, создает файл сеанса, но затем он изменяется de session_id снова и выгоняет меня.
Я действительно застрял на этом. Не могу быть уверен, что это происходит из-за PHP < 5.4 или что-нибудь еще.
Заметки:
— session_regenerate_id () используется на вход, на проверке если есть сессия (то время обновления и регенерации) и на выходе.
Мне нужно немного света на это. Я уже видел много тем, но ни одна не была достаточно информативной или близкой к решению этого странного поведения. Заранее спасибо.
SessionHandlerInterface класс доступен только с 5.4.0 или выше. Ваш код для PHP версии 5.4.0 и выше. Это, конечно, даст странные вещи
Как записать время сеанса coockie может быть установлено set_lifetime для сеанса программно?
может быть, вам нужно установить параметры cookie сеанса
session_set_cookie_params(3600);
http://php.net/manual/en/function.session-set-cookie-params.php
Только что добавлен:
ini_set('session.use_cookies', 1);
Дело в том, что я не использовал его на своей локальной сети, но я прочитал, что по умолчанию установлено значение 1 (true), и, вероятно, на моем работающем сервере он был установлен на 0. Теперь он работает нормально. Благодарю.