Как установить время жизни сессии - PullRequest
24 голосов
/ 15 июня 2011

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

Ответы [ 5 ]

34 голосов
/ 15 июня 2011

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

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

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

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

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

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

  • session_id int
  • session_hash varchar (20)
  • текст сессионных данных

При проверке 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
    }
}

Очевидно, что перед отправкой данных сохраните все вызовы сеанса / куки-файлов.

15 голосов
/ 22 июня 2014

Установить для следующих параметров php одинаковое значение в секундах:

session.cookie_lifetime
session.gc_maxlifetime

в php.ini, .htaccess или, например, с

ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);

за день.

Ссылки:

http://www.php.net/manual/en/session.configuration.php

http://www.php.net/manual/en/function.ini-set.php

3 голосов
/ 26 ноября 2018

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

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

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

3 голосов
/ 15 июня 2011

Сеансы могут быть настроены в вашем файле php.ini или в вашем файле .htaccess.Взгляните на документацию сеанса PHP .

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

0 голосов
/ 15 июня 2011

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

...