检查用户是否在ajax页面上登录更改

时间:2012-08-20 21:24:04

标签: php ajax session pushstate popstate

作为我正在构建的webapp的一部分,我需要检查用户是否在他们更改页面时登录。在一个普通的非ajax站点上,这很容易,因为我可以将PHP会话条件语句放在标题中,并且每次更改页面时调用的标题将决定是否显示登录页面,但是看作头文件只在初始加载的ajax应用程序中设置一次,如何在用户发出ajax页面请求时是否可以检查会话是否仍然有效?由于我正在使用pushState和popState,我知道我可以设置条件在URL更改时运行,但我不知道如何编码检查以便在发生这种情况时运行。

任何和所有帮助表示赞赏。

感谢。

2 个答案:

答案 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
    }
});