3

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

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

谢谢。

4

2 回答 2

3

您应该返回 false 以便您可以做一些智能的事情,例如将用户重定向到登录页面,或者更改您在问题中提到的标题,而不是使用终止脚本die('false')

IE

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 应用程序,因此您可能想尝试处理事件而不是终止程序。

于 2012-08-20T21:50:07.117 回答
2

创建一个检查会话并返回 true 或 false 的 php 页面。

因此,如果用户未登录,每当您执行 ajax 请求并且会话没有用户信息时,只会返回字符串 false,您可以使用该字符串检查 ajax 回调以显示正确的信息

例如

if(!isset($_SESSION['user'])) die('false');

然后在你的ajax回调中,你可以检查响应是否为假,或者以另一种方式处理数据EG

$.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
    }
});
于 2012-08-20T21:32:44.080 回答