如何在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秒后重置。
答案 0 :(得分:34)
PHP上的会话使用Cookie类型会话,而在服务器端,会话信息会不断删除。
要设置php中的时间生命,可以在session_start之前使用函数session_set_cookie_params:
session_set_cookie_params(3600,"/");
session_start();
例如,3600秒是1小时,2小时是3600 * 2 = 7200。
但它是会话cookie,浏览器可以自己过期,如果你想节省大量时间会话(比如记住登录),你需要将数据保存在服务器中,并在客户端保存标准cookie。 / p>
您可以拥有表格“会话”:
验证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调用。
答案 1 :(得分:14)
将以下php参数设置为相同的值,以秒为单位:
session.cookie_lifetime
session.gc_maxlifetime
在php.ini,.htaccess或例如
ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);
一天。
链接:
答案 2 :(得分:3)
可以在php.ini文件或.htaccess文件中配置会话。看看PHP session documentation。
您基本上想要做的是在php.ini中查找行session.cookie_lifetime
并使其值为0,以便会话cookie在浏览器关闭之前有效。如果您无法编辑该文件,可以将php_value session.cookie_lifetime 0
添加到.htaccess文件中。
答案 3 :(得分:2)
在PHP 7之前,session_start()函数未直接接受任何配置选项。现在您可以通过这种方式完成
#if cs
var result = untyped __cs__("the raw code in c#");
#end
参考:http://nl1.php.net/manual/en/function.session-start.php#example-5976
答案 4 :(得分:0)
由于大多数会话都存储在COOKIE中(根据上述注释和解决方案),因此重要的是确保将COOKIE标记为“安全”(前C#):
myHttpOnlyCookie.HttpOnly = true;
和/或查看php.ini(自php 5.3起默认为TRUE):
session.cookie_httponly = True
答案 5 :(得分:-3)
只要用户不删除他们的cookie或关闭他们的浏览器,会话就应该保持存在。