Как установить время жизни сеанса в PHP? Я хочу установить его навсегда, пока запрос существует. Запрос – AJAX. Мой PHP-код, который обрабатывает запрос AJAX:
// AJAX.php <?php session_start(); $_SESSION['counter'] = $_SESSION['counter'] + 1; header('Content-type: application/json'); echo json_encode(array('tick' => $_SESSION['counter'])); ?>
и JavaScript:
$(document).ready(function() { function check() { getJSON('ajax.php'); } function getJSON(url) { return $.getJSON( url, function(data) { $("#ticker").html(data.tick); } ); } setInterval(function() { check(); }, 10000); // Tick every 10 seconds });
Сессия всегда сбрасывается через 300 секунд.
Сессии на PHP работают с сеансом типа Cookie, а на стороне сервера информация о сеансе постоянно удаляется.
Для установки времени жизни в php вы можете использовать функцию session_set_cookie_params перед session_start:
session_set_cookie_params(3600,"/"); session_start();
Например, 3600 секунд – один час, в течение 2 часов 3600 * 2 = 7200.
Но это сеансовый cookie, браузер может истечь сам, если вы хотите сохранить большие сеансы (например, запомнить логин), вам нужно сохранить данные на сервере и стандартный файл cookie на стороне клиента.
У вас может быть таблица «Сессии»:
При проверке Cookie вы сохраняете «идентификатор сеанса» и «хэш» (для обеспечения безопасности) на стороне клиента, и вы можете сохранить данные сеанса на стороне сервера, например:
При входе в систему:
setcookie('sessid', $sessionid, 604800); // One week or seven days setcookie('sesshash', $sessionhash, 604800); // One week or seven days // And save the session data: saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function
Если пользователь возвращает:
if (isset($_COOKIE['sessid'])) { if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) { $_SESSION = unserialize(get_session_data($_COOKIE['sessid'])); } else { // Dont validate the hash, possible session falsification } }
Очевидно, что перед отправкой данных сохраняйте все сеансы / файлы cookie.
Задайте следующие параметры php для одного и того же значения в секундах:
session.cookie_lifetime session.gc_maxlifetime
в php.ini, .htaccess или, например, с помощью
ini_set('session.cookie_lifetime', 86400); ini_set('session.gc_maxlifetime', 86400);
на день.
Ссылки:
Сессии можно настроить в файле php.ini или в файле .htaccess. Посмотрите документацию по сеансу PHP .
То, что вы в основном хотите сделать, это найти строку session.cookie_lifetime
в php.ini и сделать ее значением 0, чтобы файл cookie сессии был действителен до закрытия браузера. Если вы не можете редактировать этот файл, вы можете добавить php_value session.cookie_lifetime 0
в ваш .htaccess файл.
Пока Пользователь не удаляет свои файлы cookie или не закрывает свой браузер, сеанс должен оставаться на месте.