我正试图想出一个会话超时(第一次)。当我调用if语句时,它将获得$ _SESSION变量的空值。我将会话从顶部的header.php文件中开始。当它在用户登录创建与此代码会话:PHP会话将返回null
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] => [email protected]
[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(); http://php.net/session_start – Webice
session_start()函数位于header.php文件中,因此无论如何都会调用它。我没有在这里的代码中包含它。所以heirarchy去header.php与session_start() - > index.php - > footer.php – user2112618