2015-12-17 4 views
0

Так что я SessionHandler класс, и мой другой файл, положить, что в движение, как это (cfg_session.php):session_id себя причудливо

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(); 

Alright, небольшая разница в том, что в моем localweb я использую :

session_set_save_handler($sessao) 

Потому что в моем местном каталоге это действительно PHP> 5.5.

Он отлично работает на моем локальном веб-сайте, обновляю страницу, выходим из системы, заходим в систему, закрываем вкладки, открываем вкладки, снова входим в систему, и все нормально, PHPSESSID из моего браузера равен тому, который был создан на файл сеанса и т. д.

EDIT: У меня есть сервер с PHP 5.4 <, и я на самом деле, используя код, приведенный выше, предназначены для PHP < 5.4, но он по-прежнему вел себя странно. Обновляет браузер, создает другой файл сеанса, но не меняет PHPSESSID. В первый раз, когда я пытаюсь войти в систему, процесс выглядит следующим образом: он создает файл сеанса, я перенаправляю пользователя на определенную страницу, которая выполняет другой запрос на сервере, он просто создает другой файл сеанса, отличный от PHPSESSID, и, конечно же, , приложение выводит меня из системы. Это странная часть.

Но тогда я пытаюсь войти в систему снова нормально, и он вводит меня в систему, просто отлично. Каждый запрос имеет тот же идентификатор, session_regenerate_id() работает нормально, все идет ОК, PHPSESSID соответствует созданному файлу сеанса.

Но тогда, если я выйду из системы, закройте эту вкладку, откройте новую вкладку и попробуйте войти (или просто закрыть вкладки без выхода из системы), она просто делает то же самое: регистрирует меня, создает файл сеанса, но то он снова меняет session_id и выкидывает меня.

Я действительно застрял на этом. Не могу быть уверен, что это происходит из-за PHP < 5.4 или что-то еще.

Примечания: - session_regenerate_id() используется на журнал в, по проверке, если есть сессии (то время обновления и regenerateId) и на журнал из.

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

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

ответ

0

Просто добавил:

ini_set('session.use_cookies', 1); 

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

1

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

+0

Я отредактировал сообщение, чтобы узнать, если я более ясен, и я думаю, что он пропустил информацию. Но дело в том, что я использую сервер с php менее 5.4, я использую код выше, предназначенный для использования на PHP менее 5.4, хорошо? Но он все еще действует странно. –

+0

Эта функция недоступна для php ниже 5.4, и если функция недоступна, то как ее использовать ..... – Vineet1982

0

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

session_set_cookie_params(3600); 

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

+0

Ну, ваш ответ заставил меня понять одно: «ini_set ('session.use_cookies', 1); ». Я не использовал его на сервере с PHP больше 5,4, но эта строка решила мою проблему. Спасибо, что помогли мне сублиминально. –

Смежные вопросы