2

我有一个用 codeIgniter 编写的 PHP 应用程序。从客户那里收到一些关于应用程序超时的投诉。他们的会话在两个小时不活动后超时,他们似乎不记得了。

有没有办法,如果有,如何在用户会话超时时显示弹出消息?

先感谢您。

4

3 回答 3

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
于 2012-12-12T22:36:26.247 回答
2

你可以这样做:

  • 使用计时器的 Javascript 函数(并在一段时间后显示弹出窗口)
  • 在 PHP 中使用您设置的计时器$_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 编写的,但希望有助于理解可以做些什么来减轻会话到期的打击。

于 2012-12-12T22:43:52.190 回答
0

可能您的会话 maxlifetime 是 2 小时。您可以使用以下命令对其进行编辑:(将 8 替换为以小时为单位的最大生命周期)。

 ini_set(’session.gc_maxlifetime’, 8*60*60);
于 2012-12-12T22:38:37.050 回答