Идентификатор сеанса изменяется в CodeIgniter - PullRequest
7 голосов
/ 08 августа 2011

Я использую функцию сеанса CodeIgniter, и я запускаю этот код:

$session_id = $this->session->userdata('session_id');
echo "My Session ID is $session_id"; 

И он постоянно меняется каждый раз, когда я загружаю страницу. Означает ли это, что сессии не сохраняются должным образом? Есть ли способ отладить это и выяснить, почему? Или я не правильно использую эту библиотеку?

Я не получаю никаких ошибок при включении отчетов об ошибках, и я использую возможность автозагрузки CI для загрузки библиотеки сеансов:

$autoload['libraries'] = array('session');

Любой совет поможет, спасибо!

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

Мой идентификатор сеанса: 7c92bac53d2654df6e87eb4e4cb25467

.. перезагрузить ..

Мой идентификатор сеанса: c6dd14aed2499760f788a1364dcab030

ОБНОВЛЕНИЕ: мои конфигурации сеансов внутри config.php выглядят так:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

Итак, я обнаружил, что

session_start();
$_SESSION['myvar']='var'; 

тоже ничего не хранит, что-то не так с хранилищем сеансов на моем linux-сервере.

Мой путь сохранения сеанса имеет разрешения apache: apache 775. Возможно, это должно быть перенесено в serverfault?

Ответы [ 6 ]

14 голосов
/ 08 августа 2011

Согласно Session.php CI, идентификатор изменяется при каждом обновлении, но они сохраняют ссылку на старый идентификатор, чтобы они могли обновить его в нужной строке.

Кроме того, согласно документу: "session_id" обновляется (по умолчанию) каждые пять минут ".

Есть ли причина, по которой вам нужен доступ к "session_id"? Если вам нужен какой-то фиксированный идентификатор, вы должны создать свой собственный «my_session_id», чтобы он не менялся между запросами.

$uniqueId = uniqid($this->CI->input->ip_address(), TRUE);
$this->session->set_userdata("my_session_id", md5($uniqueId));
2 голосов
/ 03 августа 2017

Заменив систему каталогов / library / session на самую последнюю версию (с сайта CI), проблема будет решена.В библиотеках сеансов CI было несколько ошибок, и они уже устранены.

1 голос
/ 01 октября 2017

Изменение session_id является нормальным в CI.Но у меня была проблема.Значения сеанса не сохранялись, не сохранялись только в CI.

Я исправил это, обновив Codeigniter до последней версии, которая в настоящее время 3.1.6.

1 голос
/ 22 декабря 2015

@this.lau

Можно упомянуть, что ссылка на файл будет полезна для начинающих.

т.е. CodeIgniter/system/libraries/Session.php

0 голосов
/ 18 февраля 2015

Если вы не хотите обновлять сессию каждые пять минут, внесите следующие изменения.

перейдите в файл session.php в файле System / library / Session.php и установите все параметры, например public $sess_encrypt_cookie; public $ sess_use_database; ... для заготовок Это работает для меня

0 голосов
/ 17 июня 2014

Одна возможная проблема, которую вы можете описать, я описал здесь: https://github.com/EllisLab/CodeIgniter/issues/3108

Дело в том, что это глупо. Если вы установили имя файла cookie с точками, он будет генерировать идентификатор сессии каждый раз, когда вы перезагрузите страницу. И, конечно же, вы не сможете хранить какие-либо пользовательские данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...