Подтвердить что ты не робот

Как установить время жизни сеанса

Как установить время жизни сеанса в 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 секунд.

4b9b3361

Ответ 1

Сессии на PHP работают с сеансом типа Cookie, а на стороне сервера информация о сеансе постоянно удаляется.

Чтобы установить время жизни в php, вы можете использовать функцию session_set_cookie_params перед session_start:

session_set_cookie_params(3600,"/");
session_start();

Например, 3600 секунд составляет один час, в течение 2 часов 3600 * 2 = 7200.

Но это сеансовый cookie, браузер может истечь сам, если вы хотите сохранить большие сеансы (например, запомнить логин), вам нужно сохранить данные на сервере и стандартный файл cookie на стороне клиента.

У вас может быть таблица "Сессии":

  • session_id int
  • session_hash varchar (20)
  • текст session_data​​li >

И проверяя 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 перед отправкой данных.

Ответ 3

До PHP 7 функция session_start() напрямую не принимала какие-либо параметры конфигурации. Теперь вы можете сделать это таким образом

<?php
// This sends a persistent cookie that lasts a day.
session_start([
    'cookie_lifetime' => 86400,
]);
?>

Ссылка: https://php.net/manual/en/function.session-start.php#example-5976

Ответ 4

Сессии можно настроить в файле php.ini или в файле .htaccess. Посмотрите документацию по сеансу PHP.

В основном вы хотите найти строку session.cookie_lifetime в php.ini и сделать ее равной 0, чтобы файл cookie сессии был действителен до закрытия браузера. Если вы не можете отредактировать этот файл, вы можете добавить php_value session.cookie_lifetime 0 в ваш .htaccess файл.

Ответ 5

Поскольку большинство сеансов хранятся в COOKIE (согласно приведенным выше комментариям и решениям), важно убедиться, что COOKIE помечен как SECURE (передний С#):

myHttpOnlyCookie.HttpOnly = true;

и/или vie php.ini (по умолчанию TRUE, начиная с php 5.3):

session.cookie_httponly = True

Ответ 6

Пока Пользователь не удаляет свои файлы cookie или не закрывает свой браузер, сеанс должен оставаться в силе.