Я заметил ту же проблему в одном из моих приложений.Отладка проблемы привела меня к обнаружению, что CodeIgniter неправильно реализует сериализацию / десериализацию многомерных массивов.На самом деле для этого была отправлена ошибка, и я думаю, что они либо исправили, либо собирались ее исправить.Взгляните на их сессию lib в Core.
function _serialize($data)
{
if (is_array($data))
{
foreach ($data as $key => $val)
{
if (is_string($val))
{
$data[$key] = str_replace('\\', '{{slash}}', $val);
}
}
}
else
{
if (is_string($data))
{
$data = str_replace('\\', '{{slash}}', $data);
}
}
return serialize($data);
}
Обратите внимание, что он проходит только через 1 уровень вашего массива и что ЕДИНСТВЕННЫЙ уровень, который заменяет косую черту.Проблема в том, что у вас есть многомерный массив, и, вероятно, там есть данные, которые отбрасывают сериализацию и стирают ваш сеанс.Мы исправили это, расширив их библиотеку сессий и создав следующие вызовы:
class MY_Session extends CI_Session {
public function __construct()
{
parent::__construct();
}
function _serialize($data)
{
$data = $this->_serialize_backslash_recursive($data);
return serialize($data);
}
function _unserialize($data)
{
$data = @unserialize(strip_slashes($data));
return $this->_unserialize_backslash_recursive($data);
}
function _serialize_backslash_recursive($data)
{
if (is_array($data))
{
return array_map(array($this,'_serialize_backslash_recursive'), $data);
}
else
{
if (is_string($data))
{
return str_replace('\\', '{{slash}}', $data);
}
}
return $data;
}
function _unserialize_backslash_recursive($data)
{
if (is_array($data))
{
return array_map(array($this,'_unserialize_backslash_recursive'), $data);
}
else
{
if (is_string($data))
{
return str_replace('{{slash}}', '\\', $data);
}
}
return $data;
}
}
Теперь все уровни пройдут правильно.Попробуйте и посмотрите, работает ли он для вас.