作为我正在构建的webapp的一部分,我需要检查用户是否在他们更改页面时登录。在一个普通的非ajax站点上,这很容易,因为我可以将PHP会话条件语句放在标题中,并且每次更改页面时调用的标题将决定是否显示登录页面,但是看作头文件只在初始加载的ajax应用程序中设置一次,如何在用户发出ajax页面请求时是否可以检查会话是否仍然有效?由于我正在使用pushState和popState,我知道我可以设置条件在URL更改时运行,但我不知道如何编码检查以便在发生这种情况时运行。
任何和所有帮助表示赞赏。
感谢。
答案 0 :(得分:3)
您应该返回false,以便您可以执行一些智能操作,例如将用户重定向到登录页面,或者更改问题中提到的标题,而不是使用die('false')
即
if(!isset($_SESSION['valid_user'])) {
return false;
}
或者更好的是,将json对象返回到您的脚本并使用jquery / javascript来更改标题。
$response = array();
if(!isset($_SESSION['valid_user'])) {
$response['logged_in'] = false;
} else {
$response['logged_in'] = true;
}
// return to jquery for handling
return json_encode($response);
无论哪种方式,你说你正在构建一个Web应用程序,所以你可能想尝试处理事件而不是杀死程序。
答案 1 :(得分:2)
创建一个检查会话并返回true或false的php页面。
因此,如果用户未登录,则每当您执行ajax请求且会话没有用户信息时,仅返回字符串false,您可以使用该字符串检查ajax回调以显示正确的信息
E.G
if(!isset($_SESSION['user'])) die('false');
然后在你的ajax回调中,你可以检查响应是否为假,或者以另一种方式处理数据E.G
$.ajax({"url" : url, "success" : function(response){
if(response == 'false')
{
// display a login screen or redirect the user to a login page
// E.G showLogin() or document.location = '/login.php';
} else {
// to something else with the response if the user is logged in
}
});