Потеря данных сеанса Codeigniter после перенаправления (после использования memcached в качестве хранилища сеанса)

#php #codeigniter #session #memcached

#php #codeigniter #сеанс #memcached

Вопрос:

У меня был сервер со многими PHP-приложениями, использующими CodeIgniter в качестве фреймворка. Все работает отлично.

Однако после использования Memcached в качестве хранилища сеансов (раньше я использовал файл по умолчанию для хранения сеансов) одно из моих приложений отреагировало странно. В то время как другие работают хорошо, несколько сеансов моих приложений пропали без вести после перенаправления на домашнюю страницу.

Для отладки я использую оператор, подобный этому

 class Home extends CI_Controller {

    public function __construct()
    {
            parent::__construct();
           // Your own constructor code

            var_dump($_SESSION); die;

            $this->mysession->check_no_session();
            $this->mysession->check_session_expires();
    }

    public function index()
    {
            $this->libs->check_main_template('welcome_message','');
    }
}
  

Дамп показывает мне, что в сеансе ничего не сохранено: array(0) { }

Но в других моих приложениях на том же сервере, когда я выполняю отладку, данные сеанса отображаются идеально.

Я создавал эти приложения с использованием шаблона, что означает, что все конфигурации в основном одинаковы, так какую конфигурацию / файл мне нужно просмотреть, чтобы идентифицировать / сравнить приложение OK и error, чтобы определить конфигурацию, которая может вызвать эту аномалию?

Есть идеи? Заранее спасибо за помощь.

Комментарии:

1. codeigniter.com/user_guide/libraries/sessions.html

2. пожалуйста, обратите внимание, что другие приложения на том же сервере (использующие ту же конфигурацию php.ini) работают хорошо, поэтому я предполагаю, что конфигурация сеанса не является причиной этой проблемы, спасибо…

Ответ №1:

Хорошо, я думаю, что нашел основную причину.

По-видимому, один из моих коллег установил директиву index.php в приложении, которая превышает ограничение memcache, например:

 define('SESSION_TIME_OUT', x);
ini_set('session.gc_maxlifetime', SESSION_TIME_OUT);
ini_set('session.cache_expire', SESSION_TIME_OUT);
session_start();
  

x Замените соответствующим номером (memcache принимает только числа до 2,592,000 или 30 дней), тогда проблема больше не существует.