переопределение сессии в .htaccess, и даже php ini_set не работает - PullRequest
2 голосов
/ 14 марта 2019

UPDATE

Настройки PHP ini

Директива | Местное значение | Мастер Значение

session.auto_start Выкл. Выкл.

session.cache_expire 180 180

session.cache_limiter nocache nocache

session.cookie_domain нет значения нет значения

session.cookie_httponly Выкл. Выкл.

session.cookie_lifetime 0 0

session.cookie_path / /

session.cookie_secure Выкл. Выкл.

session.entropy_file / dev / urandom / dev / urandom

session.entropy_length 32 32

session.gc_divisor 1 1

session.gc_maxlifetime 3 3

session.gc_probability 1 1

Любая помощь очень ценится. Спасибо.


ORIGINAL

Я перепробовал около 15 различных методов, через повторный поиск и прошлые сообщения о переполнении стека, и результат все тот же, я вышел из сеанса через 5-10 минут после отключения

Все, чего я хочу достичь, это оставаться в системе в течение длительного времени ...

.htaccess

<IfModule mod_php7.c>
    #Session timeout
    php_value session.cookie_lifetime "3600000"
    php_value session.gc_maxlifetime "3600000"
</IfModule>

PHP

ini_set('session.gc_maxlifetime', 3600000);
ini_set('session.cookie_lifetime', 3600000);
session_start();

if(!isset($_SESSION["username"])){
    header("Location: admin-login.php");
    exit(); 
}

if (isset($_SESSION['username']) && (time() - $_SESSION['username'] > 3600000)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['username'] = time(); // update last activity time stamp

1 Ответ

1 голос
/ 15 марта 2019

ini_set('session.gc_maxlifetime', 3600000); устанавливает время жизни файлов сеанса только для текущего запущенного скрипта. Если другие сценарии запускаются, они имеют свои собственные настройки (по умолчанию). Файл сеанса удаляется, когда его время жизни истекло , а сборка мусора вызывается .

Примечание. Если разные сценарии имеют разные значения session.gc_maxlifetime, но используют одно и то же место для хранения данных сеанса, тогда сценарий с минимальным значением будет очищать данные. В этом случае используйте эту директиву вместе с session.save_path .

http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

Это означает, что каждый скрипт, обращающийся к папке сеанса, даже сторонним сайтам, в зависимости от конфигурации общего хостинга, может иметь свою собственную настройку времени жизни и, следовательно, удалять файлы сеанса в настроенной папке. Таким образом, вы также должны установить session.save_path в папку для записи под вашим контролем. Все сценарии, обращающиеся к сеансу в этом пути сохранения, должны быть настроены с нужными настройками. См. Также функцию PHP session_save_path .

Более того, сборщик мусора сеанса не запускается при каждом запуске скрипта по умолчанию. Вы можете настроить это с помощью session.gc_probability и session.gc_divisor . Установите для вероятности и делителя значение 1.

Обратите внимание, что передача целочисленного значения в ini_set приводит к фатальной ошибке. Это должно быть строковое значение: ini_set('session.gc_maxlifetime', '3600000');.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...