检查用户登录的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页面是不是改变的主要内容,如果未能解决你的问题,请参考以下文章