Php会话:使用isset时未定义的索引

时间:2016-12-08 13:36:51

标签: php session

我目前正在开发一个简单的身份验证系统,而且我正在使用PHP Sessions。

在我的每个页面的标题中,我有一些PHP做了3件事:

  • 如果会话上次使用的时间超过30分钟,则会被销毁

  • 如果会话上次使用时间超过5分钟,则会重新生成

  • 如果ips在同一会话中不相同,则会被销毁

然而,它似乎并不适合IP。 当我使用isset检查它是否已初始化时,它给出了错误Undefined Index

session_start();
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 900) {
    // session started more than 30 minutes ago
    session_regenerate_id(true);    // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time();  // update creation time
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
//GET CHECK IP
if (!isset($_SESSION['ADDR'])) {
    if ($_SESSION['ADDR'] != get_client_ip()){
        session_unset();     // unset $_SESSION variable for the run-time 
        session_destroy();   // destroy session data in storage
    }
}else {
    $_SESSION['ADDR'] = get_client_ip();
}
echo "<pre>".print_r($_SESSION)."</pre>";

1 个答案:

答案 0 :(得分:1)

您试图说明$_SESSION['ADDR']是否设置了。删除否定运算符!

if (isset($_SESSION['ADDR'])) { 
    // code here 
}