如何在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秒后重置。
PHP上的会话与Cookie类型的会话一起使用,而在服务器端,会话信息会不断删除。
要在php中设置时间,可以在session_start之前使用session_set_cookie_params 函数:
session_set_cookie_params(3600,"/"); session_start();
例如,3600秒是1个小时,2个小时是3600 * 2 = 7200。
但是它是会话cookie,浏览器可以自行使它过期,如果您想保存长时间会话(例如记住登录),则需要将数据保存在服务器中,并将标准cookie保存在客户端中。
您可以有一个表“会话”:
并验证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调用。