如何设置会话的生命周期
如何在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上的会话使用Cookietypes的会话,而在服务器端会话信息不断删除。
为了在php中设置时间生命,可以在session_start之前使用函数session_set_cookie_params:
session_set_cookie_params(3600,"/"); session_start();
例如,3600秒是1小时,2小时3600 * 2 = 7200。
但它是会话cookie,浏览器可以自行过期,如果你想节省大量的时间会话(如记住login),你需要将数据保存在服务器和客户端的标准cookie。
你可以有一个表“会议”:
- session_id int
- session_hash varchar(20)
- session_data文本
validation一个Cookie,你在客户端保存“session id”和“hash”(为了安全),你可以把会话的数据保存在服务器端,例如:
login时:
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文件中configuration。 看看PHP会话文档 。
你基本上想要做的是在php.ini中查找session.cookie_lifetime
行,并使其值为0,这样会话cookie在浏览器closures之前是有效的。 如果你不能编辑这个文件,你可以添加php_value session.cookie_lifetime 0
到你的.htaccess文件。
只要用户不删除他们的cookies或closures他们的浏览器,会话应该保持存在。