Zend Framework - идентификатор сессии восстановлен, не может оставаться в системе - PullRequest
6 голосов
/ 11 мая 2011

Привет, люди :( разве нет никого, кто мог бы помочь мне здесь

Привет, ребята, я пытаюсь сохранить сеансы в базе данных, используя Zend Sessions, но по некоторым причинам мои сеансы вымираютЯ не уверен, выполняется ли какой-то код, который выполняет это или что-то еще.

Я заметил, что идентификатор сеанса, похоже, восстанавливается через некоторое время после входа в систему.

Это даже несмотря на то, что я добавил следующую строку в мой файл htaccess:

php_value session.auto_start 0

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

Heresмой код в моем файле начальной загрузки

$config = array(
    'name'           => 'session',
    'primary'        => 'id',
    'modifiedColumn' => 'modified',
    'dataColumn'     => 'data',
    'lifetimeColumn' => 'lifetime'
);


$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
Zend_Session::rememberMe($seconds = (60 * 60 * 24 * 30)); 

$saveHandler->setLifetime($seconds)->setOverrideLifetime(true); 

Zend_Session::setSaveHandler($saveHandler);
//start your session!
Zend_Session::start();

Я не использую никакую другую функцию, связанную с сеансом, за исключением, возможно, Zend_Auth при входе в систему.


Infact rememberme вызывает функцию refreshrateIDкласса Session - конечным результатом является то, что теперь я постоянно отключаюсь каждые несколько минут.

Ответы [ 5 ]

5 голосов
/ 11 мая 2011

Вы пробовали что-то подобное?

protected function _initSession() {
    $config = array(
        'name'  => 'session',
        'primary'  => 'id',
        'modifiedColumn' => 'modified',
        'dataColumn' => 'data',
        'lifetimeColumn' => 'lifetime',
        'lifetime' => 60*60*24*30,
    );

    Zend_Session::setSaveHandler(new F_Session_SaveHandler_DbTable($config));        
}

Таким образом, время жизни не устанавливается после инициализации сеансов базы данных, а напрямую включается в параметры инициализации - это работает для меня, я не вижу причин, почему это может не сработать в вашем случае:).

5 голосов
/ 11 мая 2011

Я думаю, что у вас может быть эта проблема, потому что вы вызываете RememberMe ДО начала сеанса.

Вы должны начать сеанс первым, иначе RememberMe ничего не сделает, так как ему нужен сеанс, чтобы установить время RememberMe.

RememberMe вызывает функцию refreshrateId, и для регенерации Id действительно необходим сеанс.

Сделайте вызов RememberMe после начала сеанса, затем посмотрите, как это работает для вас.

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

2 голосов
/ 01 июня 2011

Я думаю, вам нужно один раз взглянуть на следующие значения после кода начальной загрузки

session.gc_maxlifetime
session.cookie_lifetime
1 голос
/ 23 июля 2011

У меня была эта проблема, потому что первичный идентификатор в моей таблице БД был установлен на INT (11) (IDIOT!)

Дублирующиеся сеансы БД, созданные при входе в Zend_Auth

Должно быть установлено значение CHAR (32)!Я установил его на INT по привычке.Я провел 4 дня, выслеживая это.

0 голосов
/ 28 июня 2015

Если вы конфигурируете ресурсы сеанса в файле конфигурации * .ini, проверьте параметр resources.session.cookie_domain .Я провел 3 часа, когда вспомнил об этом.

...