我试图提出会话超时(第一次)。当我调用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函数来读取它时只会出现问题。
答案 0 :(得分:1)
您尚未在header.php
文件中启动会话和/或未将timeout.php
包含在此文件中,因此会话永远不会在timeout.php
中启动。该{y}会话在timeout.php
文件中取消定义。
您可以在if(!isset($_SESSION)) session_start();
中添加条件,例如:
{{1}}