如何设置会话的生命周期

如何在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); 

一天。

链接:

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

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

会话可以在你的php.ini文件或你的.htaccess文件中configuration。 看看PHP会话文档 。

你基本上想要做的是在php.ini中查找session.cookie_lifetime行,并使其值为0,这样会话cookie在浏览器closures之前是有效的。 如果你不能编辑这个文件,你可以添加php_value session.cookie_lifetime 0到你的.htaccess文件。

只要用户不删除他们的cookies或closures他们的浏览器,会话应该保持存在。