检查用户登录的ajax页面是不是改变

Posted

技术标签:

【中文标题】检查用户登录的ajax页面是不是改变【英文标题】:Check if user logged in on ajax page change检查用户登录的ajax页面是否改变 【发布时间】:2012-08-16 05:47:09 【问题描述】:

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

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

谢谢。

【问题讨论】:

只需创建一个 php 页面来检查会话并返回 true 或 false。因此,如果用户未登录,每当您执行 ajax 请求并且会话没有用户信息时,只会返回字符串 false,您可以使用该字符串检查 ajax 回调以显示正确的信息 干杯。将此作为答案发布,以便我批准。 【参考方案1】:

您应该返回 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)。 die() 是 php 中最原始的事件处理方式。因此,如果您是客户端穴居人,并且不介意在某些评估为 false 时杀死整个脚本,那么请继续,做您想做的事。但是当你开始在 php 中做更复杂的事情时,你会意识到这是一个不好的习惯,然后你就会知道为什么我刚刚称你为尼安德特人。没有冒犯 无意冒犯,因为我不是客户端开发人员。尽管这是一个坏习惯,但 OP 需要一种方法来检查会话是否有效。他没有要求正确的方法,所以我给了他最快的实现方式来满足他的需求。如果他要求正确的方法,那么我的答案将完全不同。为什么对一个可能不是强大开发人员的人来说过于复杂?根据问题,很明显他不是一个强大的开发人员,并且可能会对简单的实现感到满意,而不是过于复杂他可能不理解的事情 【参考方案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
    
);

【讨论】:

以上是关于检查用户登录的ajax页面是不是改变的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:检查用户是不是登录多个页面

PHP:如何检查用户是不是已经登录,否则重定向到登录页面

如何在目标c中检查用户是不是登录?

Angular 6 AngularFireAuth检查用户是不是在页面呈现之前登录

Firebase - 始终检查用户是不是登录的最佳方式?

Modx 管理器自定义页面检查用户是不是已登录并具有管理器访问权限