ОБНОВЛЕНИЕ: Эта проблема исправлена в CI v3.1.1.Пожалуйста, обновитесь до> = 3.1.1, чтобы полностью избавиться от этой проблемы.
@ prakasht - Я столкнулся с подобной проблемой и обнаружил ее, когда искал исправление.Для меня это произошло при попытке обновить CI v2.2.6 -> v3.0.3
Внезапно мои сеансы перестали работать.Я добавил несколько журналов для отладки сценария в драйвере файлового сеанса system/libraries/Session/drivers/Session_files_driver.php
Имея централизованные сеансы как в моем предыдущем, так и в текущем месте работы, я обнаружил, что каким-то образом сеанс был заново создан длякаждый запрос, основанный на добавленных мною журналах.
Как ленивый человек, я пытался перебрать свой путь через него, когда увидел ваш ответ выше .
Это было дотеперь ближе всего я видел, как кто-то решает эту проблему с помощью Ci, поскольку все остальные просто добавляют хаки.Я попытался отладить код в файле system/libraries/Session/Session.php
самостоятельно и обнаружил, что санация preg_match()
никогда не совпадает.
В регулярном выражении при попытке проверить значение cookie попыталось сопоставить с
if (isset($_COOKIE[$this->_config['cookie_name']])
&& (
! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
)
)
Я попытался сопоставить значение моего cookie с регулярным выражением ^[0-9a-f]{40}$
и обнаружил, что это не удалось.Итак, следуя определению в файле application/config/config.php
, я изменил регулярное выражение на ^[0-9a-z_-]{1,40}$
, что в основном означает, что регулярное выражение может соответствовать любому значению cookie между длинами от 1 до 40, состоящим из символов в любом из них или сочетанием набора 0-9, a-z, _ , -
.
Код с фиксированным регулярным выражением
if (isset($_COOKIE[$this->_config['cookie_name']])
&& (
! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-z_-]{1,40}$/', $_COOKIE[$this->_config['cookie_name']])
)
)
Это исправило это для меня.Надеюсь, что это сделает то же самое для вас.
PS: Я также заменил все экземпляры
$this->session->all_userdata()
на $this->session->userdata()
и
$this->session->set_userdata($key, $value)
с $this->session->key = $value
в моей кодовой базе согласно CI 2.2.x -> 3.x документация обновления и документация библиотеки сеансов
ОБНОВЛЕНИЕ: эта проблема исправлена в CI v3.1.1.Пожалуйста, обновитесь до> = 3.1.1, чтобы полностью избавиться от этой проблемы.