phpMyAdmin-не может изменить время окончания сеанса


Я знаю, что этот вопрос задавался много раз на сайте SO. Тем не менее, я прочитал это, это, это, это, это и это, и многое другое. Ни один из них не сработал. Я также пытался изменить расположение файлов сеанса и другие вещи, которые я сейчас не помню.

Мои настройки:

Один: файл config.inc.php:

<?php
$cfg['LoginCookieValidity'] = 3600 * 24; // http://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieValidity

Это отображается в настройках phpMyAdmin:

Введите описание изображения здесь

Два: .htaccess файл:

php_value session.gc_maxlifetime 86400

Три: phpinfo.php файл из корня phpMyAdmin показывает:

Введите описание изображения здесь

Четыре: сервер (uname-a):

Linux ubuntu-13 3.11.0-26-generic #45-Ubuntu SMP Tue Jul 15 04:02:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Есть ли другой способ увеличить тайм-аут сеанса phpMyAdmin?

2 17

2 ответа:

По умолчанию Ubuntu отключает сборщик мусора сессий PHP (установив мастер-значение session.gc_probability в 0), а вместо этого использует cronjob для удаления файлов сессий по достижении ими определенного возраста. Возраст определяется главным значением session.gc_maxlifetime.

Это означает, что независимо от вашего локального значения 86400 секунд (которое не имеет никакого эффекта из-за отключенной сборки мусора сеанса) cronjob удалит файлы сеансов через 1440 секунд.

Итак, у вас есть 2 варианты:

  1. Отключите cronjob (вероятно, /etc/cron.d/php5) и включите сборщик мусора сессии PHP, установив session.gc_probability в 1all /etc/php5/*/php.ini файлы).

  2. Установите правильное главное значение для session.gc_maxlifetime. Ваш - 1440 секунд. Alter it (in all /etc/php5/*/php.ini файлы) до наибольшего локального значения, которое использует любое приложение виртуального хоста / php на сервере (так что не менее 86400 секунд).

PhpMyAdmin должен нормально работать с вашими конфигурациями, возможно, вы что-то напутали, когда изначально пытались заставить его работать. так как вы не можете переустановить phpmyadmin или сделать обновления на сервере. есть и другие решения этой проблемы.

Взлом ядра

Я не думаю, что это хорошая идея, но если вы действительно хотите избавиться от этого, вы можете отключить эту функцию, изменив AuthenticationCookie.class.php в libraries/plugins/auth/

Перейти эту строку

    if ($_SESSION['last_access_time'] < $last_access_time
    ) {
        PMA_Util::cacheUnset('is_create_db_priv', null);
        PMA_Util::cacheUnset('is_process_priv', null);
        PMA_Util::cacheUnset('is_reload_priv', null);
        PMA_Util::cacheUnset('db_to_create', null);
        PMA_Util::cacheUnset('dbs_where_create_table_allowed', null);
        $GLOBALS['no_activity'] = true;
        $this->authFails();
        if (! defined('TESTSUITE')) {
            exit;
        } else {
            return false;
        }
    }

И отредактируйте его, чтобы

    if (false
    ) {
        PMA_Util::cacheUnset('is_create_db_priv', null);
        PMA_Util::cacheUnset('is_process_priv', null);
        PMA_Util::cacheUnset('is_reload_priv', null);
        PMA_Util::cacheUnset('db_to_create', null);
        PMA_Util::cacheUnset('dbs_where_create_table_allowed', null);
        $GLOBALS['no_activity'] = true;
        $this->authFails();
        if (! defined('TESTSUITE')) {
            exit;
        } else {
            return false;
        }
    }

При этом функция будет отключена и больше не будет таймаута. Вы всегда можете нажать на выход, когда закончите свою работу с phpmyadmin.

Или используйте надстройку браузера