#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 дней), тогда проблема больше не существует.