php 登录会话超时错误
php login session timeout error
我正在创建一个登录脚本,当用户登录时,他将能够在系统注销前停留 3 小时。
以下是我的login.php
....
$_SESSION['dgUserLoggedIn'] = true;
$_SESSION['timeout'] = time();
....
登录-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();
您检查过 php.ini 文件中 session.gc_maxlifetime 的值了吗?我想这就是导致问题的原因
会话默认超时为 24 分钟(1440 秒)。
请检查 PHP sessions default timeout
首先检查服务器上的默认会话超时设置并在代码中添加以下行。我希望它对你有用
session_set_cookie_params(10800);
您也可以尝试使用 ini_set:
在运行时更改值
ini_set('session.gc_maxlifetime', '10800');
或
您可以在 php.ini 文件中更改此行。
session.gc_maxlifetime = 1440
更新:好像是可以的,所以我更正了
php_value
session.gc_maxlifetime = 10800
希望对您有所帮助
我正在创建一个登录脚本,当用户登录时,他将能够在系统注销前停留 3 小时。
以下是我的login.php
....
$_SESSION['dgUserLoggedIn'] = true;
$_SESSION['timeout'] = time();
....
登录-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();
您检查过 php.ini 文件中 session.gc_maxlifetime 的值了吗?我想这就是导致问题的原因
会话默认超时为 24 分钟(1440 秒)。 请检查 PHP sessions default timeout
首先检查服务器上的默认会话超时设置并在代码中添加以下行。我希望它对你有用
session_set_cookie_params(10800);
您也可以尝试使用 ini_set:
在运行时更改值ini_set('session.gc_maxlifetime', '10800');
或
您可以在 php.ini 文件中更改此行。
session.gc_maxlifetime = 1440
更新:好像是可以的,所以我更正了
php_value
session.gc_maxlifetime = 10800
希望对您有所帮助