PHP:pop显示应用服务器超时

时间:2012-12-12 22:32:51

标签: php session-timeout

我有一个用codeIgniter编写的PHP应用程序。从客户处获得有关应用超时的一些投诉。他们的会话在两个小时不活动后超时,他们似乎无法记住这一点。

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

提前谢谢。

3 个答案:

答案 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)

你可以使用:

  • 使用计时器的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编写的,但希望有助于理解可以做些什么来减轻会话到期的打击。

答案 2 :(得分:0)

Probarly您的会话maxlifetime是2小时。 您可以使用以下方法对其进行编辑:(将最长生命周期替换为8小时)。

 ini_set(’session.gc_maxlifetime’, 8*60*60);