PHP会话返回null

时间:2015-07-21 13:58:28

标签: php jquery ajax session

我试图提出会话超时(第一次)。当我调用if语句时,它会为$ _SESSION变量获取null。我在顶部的header.php文件中启动了会话。当用户登录时,使用以下代码创建会话:

public static function create_session($values) {
    foreach ( $values as $key => $value ) {
        if ($key != "password") {
            $_SESSION[$key] = $value;
        }           
    }

    $_SESSION["timestamp"] = time();
}

然后重定向到仅包含以下内容的索引页面:

<?php
  echo "<pre>";
  print_r($_SESSION);
  echo "</pre>";
?>

这样可以正常打印页面上的所有会话变量。

这是使用上面的代码在index.php文件中打印的内容。

Array
(
  [id] => 33
  [first_name] => removed to not show name
  [last_name] => removed to not show name
  [email] => test@test.com
  [timestamp] => 1437486426
)

在我的footer.php文件中,我有一些jquery每隔5秒运行一次定时函数调用timeout.php文件。

(function poll() {
   setTimeout(function() {
       $.ajax({ url: "timeout.php", success: function(data) {
            console.log(data);
       }, dataType: "json", complete: poll });
    }, 5000);
})();

超时php文件中只包含此代码:

if (isset($_SESSION)) {
    if ($_SESSION['timestamp'] + 10 * 60 < time()) {
        // session timed out
        echo json_encode(array('session' => $_SESSION, 'session_timestamp' => $_SESSION['timestamp'], 'timestamp_calculation' => $_SESSION['timestamp'] + 10 * 60, 'timeoutstatus' => 'timed out'));
    } else {
        // session ok
        echo json_encode(array('session' => $_SESSION, 'session_timestamp' => $_SESSION['timestamp'], 'timestamp_calculation' => $_SESSION['timestamp'] + 10 * 60, 'timeoutstatus' => 'not timed out'));
    }
} else {
    echo json_encode(array('session' => 'Session does not exits'));
}

由于某种原因,我得到的会话不存在。如果我删除if语句的那一部分并只测试超时,则调用$ _SESSION的所有json数组变量都返回null。我不知道为什么会这样。感谢您的帮助。

回应这是一个重复。最初的想法是没有调用session_start()。我曾经提到它在第一段中被调用,它出现在所有其他PHP代码之前。我还确认我可以在索引页面中调用$ _SESSION变量就好了。我试图通过我的footer.php调用的ajax函数来读取它时只会出现问题。

1 个答案:

答案 0 :(得分:1)

您尚未在header.php文件中启动会话和/或未将timeout.php包含在此文件中,因此会话永远不会在timeout.php中启动。该{y}会话在timeout.php文件中取消定义。

您可以在if(!isset($_SESSION)) session_start(); 中添加条件,例如:

{{1}}