代码之家  ›  专栏  ›  技术社区  ›  Arantor

会话/身份验证如何与nginx/nhpm/php-fpm一起工作?

  •  6
  • Arantor  · 技术社区  · 14 年前

    因此,我正在研究使用nginx和nginx-http push模块和php-fpm来构建一个应用程序,在进行了大量有趣的配置之后,我让它工作到处理php页面的程度。

    不过,我不知道会话应该如何工作——我所看到的nginx+nhpm的所有示例都是通过发布服务器订阅服务器系统运行的,但是如果订阅服务器通道对订阅服务器来说是唯一的,那么会发生什么,这一点永远都不清楚。例如,为每个用户设想一个带有公共频道和私人频道的聊天系统。

    现在,在传统的PHP设置中,您将把cookie传递给PHP,从那里查找会话,并根据用户是否经过身份验证来处理页面的其余部分,但是使用php-fpm和长轮询,似乎不应该这样工作。

    我可以理解,如果请求是一个未经身份验证的用户,您只需将其转储为一条错误消息,并从客户端终止长轮询,因为知道它无效,但是对于有效的请求,您几乎需要从客户端进行轮询,用php进行身份验证,然后断开连接,但保留请求我不知道那部分是怎么工作的。

    有人能解释它应该如何实现吗?如果可能的话,最好用一个例子来解释?请注意我是 在这里查找HTTP基本身份验证,我需要根据MongoDB中的单独数据存储来查找身份验证。

    1 回复  |  直到 14 年前
        1
  •  2
  •   abesto    14 年前

    免责声明:我不清楚你的4。段落。

    据我所知,nhpm中的身份验证的主要问题是PHP应用程序对传入连接的通知绝对为零。设置的Comet部分只为PHP编写。

    接下来可能会有一个解决方案,我将在接下来的几天内尝试。

    nginx配置:

    • 首先推送订户并发:这样通道只能由预期用户使用
    • 只推动授权渠道:不是严格必要的,但在我看来很好

    授权工作流:

    1. 客户端通过老式请求发送凭据
    2. 服务器进行身份验证,并生成令牌(通道ID)。创建通道并用令牌响应。
    3. 客户端尝试打开对给定通道的长轮询。
      • 如果失败(可能是因为频道被劫持),它会告诉服务器频道so-so是无效的。请注意,我们在这里使用老式的请求,这样您就可以使用任何身份验证方法。服务器删除通道。回到第二步。
      • 如果连接成功(您可能不知道这一点,只知道它没有失败),那么可以认为通道是经过身份验证的。

    请注意,如果您的应用程序应该可以从同一浏览器中的多个页面以相同的登录名访问,那么您需要为每个用户准备多个通道。