Php 如果用户尚未登录,我如何拒绝他们访问我的主干应用程序的某些部分?

Php 如果用户尚未登录,我如何拒绝他们访问我的主干应用程序的某些部分?,php,login,backbone.js,access-control,Php,Login,Backbone.js,Access Control,所以我有一个主干应用程序+网页。现在,如果您登录到我的网站,我将使用数据库中的用户详细信息创建一个全局对象。但是,您仍然可以直接点击应用程序中的一条路由 如何处理未“登录”的用户并将其重定向到“您必须登录”页面 这是标准操作吗?基本上,我有一个RESTURL设置,它只返回 {sessionId:[php sessionId here]} 如果他们登录,它将返回类似以下内容: { sessionId: [php-sess-id], userId: [user-id-from-db],

所以我有一个主干应用程序+网页。现在,如果您登录到我的网站,我将使用数据库中的用户详细信息创建一个全局对象。但是,您仍然可以直接点击应用程序中的一条路由

如何处理未“登录”的用户并将其重定向到“您必须登录”页面

这是标准操作吗?基本上,我有一个RESTURL设置,它只返回

{sessionId:[php sessionId here]}

如果他们登录,它将返回类似以下内容:

{
  sessionId: [php-sess-id],
  userId: [user-id-from-db],
  firstName: [f-name],
  lastName: [l-name]
}

想法?谢谢

如果您使用jQuery,可以设置一个全局的
ajaxSetting
,允许您在特定的http代码上执行某些操作。我读过的一些页面建议在JSON中添加一个url字段以指向登录位置,但我认为这取决于您。因此,实现我提到的功能所需的唯一修改是1。将http代码更改为类似401(未经授权)的合理值,并实现http代码处理程序。但我不会称之为标准,我只想说这是一些人(包括我自己)所做的。


然后在代码中,您可以使用以下内容:
if(isLogged()){header('位置:http://google.com“);}

我过去所做的是在每个页面上都包含jQuery(实际上,添加到jQuery文件)的AJAX方法扩展名,以检查用户未登录时我发送的自定义代码。当看到该值时,它会将用户重定向到登录页面,而不管发生了什么

这是因为该站点在登录时有一个超时,因此用户可以在页面上注销,然后AJAX请求就会失败。如果登录时没有超时,则出现此问题的可能性很小。只需忽略来自未登录用户的请求

如果您需要编码此代码的帮助,请从这里开始:


真的不需要像伪代码那样复杂的东西:

  • JS需要做一些AJAX,所以JS和服务器对话
  • 如果需要,PHP会检查登录
  • 如果未登录,则返回中止消息(我使用转换器捕获“notLoggedIn”数据类型。不过,这也可以通过传输完成,它们只是更复杂而已。)
  • JS看到中止消息并执行window.location重定向,而不是返回AJAX消息
    如果您愿意,您可以加载一个带有登录表单的lightbox,并通过AJAX将其发送到PHP,在那里可以进行重新登录,如果您记得AJAX尝试失败,您可以在登录后再次发送它。然后用户甚至不需要离开页面就可以重新登录。

    这似乎是一个不错的高级概述:似乎与选定的答案非常相似(如果不是重复的话)。我已经阅读了这个q/a,这是我所了解的。据我所知,人们似乎通常使用REST服务器来处理“登录”/“注销”功能。但我还有一个问题,如果你直接去一条应该登录的路线,你会如何处理?在这种情况下,我必须对每个单独的路由进行登录检查吗?我确实考虑过在REST服务器部分上执行HTTP代码。这可能最终是最干净的设置。我必须了解对所有人开放的资源,而不是需要登录的资源。这里的问题不是PHP,我更感兴趣的是如何在BackboneJS端执行所有逻辑。你有什么想法吗?这种方法很有趣。如果我扩展ajax方法,那么它不适用于所有请求吗?我想我还需要包括一些关于是否检查用户是否登录的标志?另一个选项可能是将我的BB应用程序拆分为两个路由器。1个用于登录的路由器,一个用于未登录的路由器。登录将覆盖未登录路由器。实际上,不,您可以让PHP处理它。如果该方法不需要登录,请不要检查,也不要返回“此傻瓜未登录”标记。您将设置所有AJAX请求,以强制遵守未记录的规则。DampeS8N,是否有一种快速/简单的方法可以为您的建议编写一些伪代码。我仍然很难理解这个概念(我是BB/JS面向对象的新手),但我已经做PHP十年了。不管怎样,我认为你已经得到了最好的答案,所以这个问题属于你!太好了,我想我明白了。我今天要做这个实验!!谢谢你的帮助!
    <?php 
    function IsLoggedIn()
    {
        if(isset($_SESSION['id'])) // Change that to what you want
    {
        return 1;
    }
        else
    { 
        return 0; 
    } 
    }
    ?>