Session_id ведет себя странно

Итак, у меня есть класс 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 () используется на вход, на проверке если есть сессия (то время обновления и регенерации) и на выходе.

  • cfg_session.php требуется один раз на каждой странице который должен использовать переменные сеанса.

Мне нужно немного света на это. Я уже видел много тем, но ни одна не была достаточно информативной или близкой к решению этого странного поведения. Заранее спасибо.

0

Решение

SessionHandlerInterface класс доступен только с 5.4.0 или выше. Ваш код для PHP версии 5.4.0 и выше. Это, конечно, даст странные вещи

1

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

Как записать время сеанса coockie может быть установлено set_lifetime для сеанса программно?
может быть, вам нужно установить параметры cookie сеанса

session_set_cookie_params(3600);

http://php.net/manual/en/function.session-set-cookie-params.php

0

Только что добавлен:

ini_set('session.use_cookies', 1);

Дело в том, что я не использовал его на своей локальной сети, но я прочитал, что по умолчанию установлено значение 1 (true), и, вероятно, на моем работающем сервере он был установлен на 0. Теперь он работает нормально. Благодарю.

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