【发布时间】:2015-10-11 00:51:41
【问题描述】:
我正在尝试提出会话超时(第一次)。每当我调用 if 语句时,它都会为 $_SESSION 变量获取空值。我在顶部的 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 函数读取它时遇到问题。
【问题讨论】:
-
我在任何地方都看不到
session_start()。我看不出你的索引页是如何像你说的那样工作的。 -
您开始会话了吗? session_start(); php.net/session_start
-
session_start() 函数位于 header.php 文件中,因此无论如何都会调用它。我没有将其包含在此处的代码中。所以层次结构将 header.php 与 session_start() -> index.php -> footer.php