我有一个用codeIgniter编写的PHP应用程序。从客户处获得有关应用超时的一些投诉。他们的会话在两个小时不活动后超时,他们似乎无法记住这一点。
有没有办法,如果有,如何在用户会话超时时显示弹出消息?
提前谢谢。
答案 0 :(得分:3)
PHP
无法自动显示弹出窗口,但您可能会JavaScript
查询会话状态并在会话过期时显示弹出窗口,甚至更好,计算自此以后的时间会话打开并让用户提前知道他的会话即将超时
如果您想更改会话的持续时间,请在config.php
$config['sess_expiration'] = 7200;
7200是120分* 60秒。如果您将其更改为0
,则会话将不会过期。
要添加警告,最简单的方法可能是添加类似于
的JavaScript
setTimeout(function(){alert("Your session will expire in 5 minutes")},6900000); // 6900 seconds (115 minutes) * 1000 milliseconds
答案 1 :(得分:2)
你可以使用:
$_SESSION
中设置的计时器并计算时间戳的差异(当用户被重定向到登录页面时,传递消息“您的会话超时”)您甚至可以为不同的用户组提供不同的超时时间......
使用PHP的示例将其记录下来,告诉他们并在他们重新登录后重定向:
// get time now
$now = time();
// Set session period
$autologout = '7200';
if (isset($_SESSION["TimeOut"]))
{
if ($now > $_SESSION["TimeOut"])
{
// Unregister session and set message
session_unregister("authenticatedUser");
session_register("loginMessage");
$loginMessage = "Your session has timed out";
// Capture request URL and store in a cookie so that they
// are logged back into the page they were requesting
$requestURL = $_SERVER[REQUEST_URI];
setcookie("requestURL",$requestURL,"0",'/','',FALSE,TRUE);
// Redirect back to login page
header("Location: " . $loginScript);
exit;
} else {
$_SESSION['TimeOut'] = ($now + $autologout);
}
} else {
$_SESSION['TimeOut'] = ($now + $autologout);
}
这假定您的系统会话超时更长或另外设置。它也不是为codeIgnitor编写的,但希望有助于理解可以做些什么来减轻会话到期的打击。
答案 2 :(得分:0)
Probarly您的会话maxlifetime是2小时。 您可以使用以下方法对其进行编辑:(将最长生命周期替换为8小时)。
ini_set(’session.gc_maxlifetime’, 8*60*60);