检查用户是否在Ajax页面更改时已登录

3
作为我正在构建的 Web 应用程序的一部分,每当用户更改页面时,我需要检查他们是否已登录。在正常的非 Ajax 网站上,这很容易做到,因为我可以在头部放置 PHP 会话条件语句,由于头部在每个页面更改时都会被调用,它将确定是否显示登录页面。但是,由于头文件仅在 ajax 应用程序中设置一次(即在初始加载时),因此我该如何检查用户何时发出 ajax 页面请求以确定会话是否仍然有效呢?由于我正在使用 pushState 和 popState,我知道我可以将条件设置为在 URL 更改时运行,但我不知道如何编写检查以使其在此发生时运行。

非常感谢您的所有帮助。

谢谢。


1
只需创建一个PHP页面,检查会话并返回true或false。因此,如果用户未登录,则每当您进行ajax请求且会话没有用户信息时,仅返回字符串false,您可以在ajax回调中使用该字符串以显示正确的信息。 - Pierre
欢呼。将以下与编程有关的内容从英语翻译成中文。仅返回翻译文本。 - CoreyRS
2个回答

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


返回一个值为false的json对象或使用输出false停止脚本将完成相同的操作。在ajax回调中,区别仅在于(if(response == 'false')),而在json中,它将是(if(response.logged_in == false))。 - Pierre
die()是处理PHP事件的最原始方式。因此,如果您是不介意在某些条件为false时杀死整个脚本的客户端原始人,那么请随意做您想做的事情。但当您开始在PHP中执行更复杂的操作时,您会意识到这是一个不好的习惯,然后您就会知道为什么我刚才称呼您为尼安德特人了,别见怪。 - mynewaccount
1
不会被冒犯,因为我不是客户端开发人员。虽然这是一个坏习惯,但 OP 需要一种检查会话是否有效的方法。他没有询问正确的方式,所以我给了他最快的实现方式,以满足他的需求。如果他询问正确的方式,那么我的答案将完全不同。何必为某些可能不是强大的开发人员而过度复杂化事情呢?根据问题,很明显他不是一个强大的开发人员,可能会喜欢一个简单的实现,而不是过度复杂化他可能不理解的事情。 - Pierre

2
创建一个 PHP 页面,检查会话并返回 true 或 false。
因此,如果用户未登录,则每当您进行 ajax 请求且会话没有用户信息时,仅返回字符串 false,您可以使用该字符串在 ajax 回调中进行检查以显示正确的信息。
例如:
if(!isset($_SESSION['user'])) die('false');

在您的ajax回调函数中,您可以检查响应是否为false,或以另一种方式处理数据,例如:

$.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
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接