我正在创建一个登录脚本,当用户登录时,他将能够停留3个小时,然后系统将其注销。
以下是我的login.php
....
$_SESSION['dgUserLoggedIn'] = true;
$_SESSION['timeout'] = time();
....
每个页面顶部需要验证的login-check.php:
function isLoginSessionExpired() {
$login_session_duration = 10800;
$current_time = time();
if(isset($_SESSION['timeout']) and isset($_SESSION['dgUserLoggedIn'])){
if(((time() - $_SESSION['timeout']) > $login_session_duration)){
session_regenerate_id(true); // change session ID for the current session and invalidate old session ID
$_SESSION['timeout'] = time(); // update creation time
return true;
}
}
return false;
}
if(isset($_SESSION["dgUserLoggedIn"])) {
if(isLoginSessionExpired()) {
header("Location: /core/logout.php");
}
}
使用上面的代码,用户将在30分钟左右后自动注销,如何确保用户可以保持登录状态3小时,并且每次页面刷新或访问时间都会自动更新。
下面是我的session-setup.php
// **PREVENTING SESSION HIJACKING**
// Prevents javascript XSS attacks aimed to steal the session ID
ini_set('session.cookie_httponly', 1);
// Adds entropy into the randomization of the session ID, as PHP's random number
// generator has some known flaws
ini_set('session.entropy_file', '/dev/urandom');
// Uses a strong hash
ini_set('session.hash_function', 'whirlpool');
// **PREVENTING SESSION FIXATION**
// Session ID cannot be passed through URLs
ini_set('session.use_only_cookies', 1);
// server should keep session data for AT LEAST 1 hour
ini_set('session.gc_maxlifetime', 3600);
// each client should remember their session id for EXACTLY 1 hour
session_set_cookie_params(3600);
// Uses a secure connection (HTTPS) if possible
ini_set('session.cookie_secure', 1);
session_start();
尝试使用小于运算符。来更改if(((time() - $_SESSION[timeout]) > $login_session_duration)){。
您也可以尝试在运行时使用ini_set更改值:
ini_set('session.gc_maxlifetime', '10800');
要么
您可以在php.ini文件中更改此行。
session.gc_maxlifetime = 1440
更新:这似乎有可能,所以我纠正了
php_value
session.gc_maxlifetime = 10800
我希望这会有所帮助
首先检查服务器上的默认会话超时设置,然后在代码中添加以下行。 我希望它对你有用
会话的默认超时为24分钟(1440秒)。
请检查PHP会话默认超时
您是否检查了php.ini文件中session.gc_maxlifetime的值? 我猜这是导致问题的原因
我把我的session-setup.php @Atif
您可以检查session.gc_divisor和session.gc_probability的值吗? 看看stackoverflow.com/questions/3428153/