如何设置会话的生存期

2022-08-30 15:51:18

如何在PHP中设置会话生存期?我想把它设置为永远,只要请求存在。该请求是 AJAX。我处理AJAX请求的PHP代码是:

// 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 秒后重置。


答案 1

PHP 上的会话与 Cookie 类型的会话一起使用,而在服务器端,会话信息会不断被删除。

对于在php中设置时间寿命,可以在session_start之前使用函数session_set_cookie_params:

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

例如,3600 秒为 1 小时,2 小时为 3600*2 = 7200。

但它是会话cookie,浏览器可以自行过期,如果要节省大量时间的会话(如记住登录),则需要将数据保存在服务器中,并在客户端保存标准cookie。

您可以有一个表“会话”:

  • session_id整型
  • session_hash瓦查(20)
  • session_data文本

验证Cookie时,您可以将“会话ID”和“哈希”(为了安全)保存在客户端,并且可以将会话的数据保存在服务器端,例如:

登录时:

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 调用。


答案 2

在几秒钟内将以下 php 参数设置为相同的值:

session.cookie_lifetime
session.gc_maxlifetime

在 php.ini、.htaccess 或例如 with

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


推荐