繁体   English   中英

会话/身份验证如何与nginx / NHPM / PHP-FPM一起使用?

[英]How does session/authentication work with nginx/NHPM/PHP-FPM?

所以,我正在考虑使用nginx和nginx-http-push-module以及PHP-FPM构建一个应用程序,经过大量有趣的配置后,我得到了它应该处理PHP页面的工作。

然而,我没有得到的是会话应该如何工作 - 我见过的nginx + NHPM的所有例子都是通过发布者 - 订阅者系统运行的,但是如果订阅者频道正在进行,它将永远不清楚会发生什么对用户而言,实际上是唯一的。 例如,可以考虑为每个用户提供具有公共频道和私人频道的聊天系统。

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

我可以理解,如果请求是非经过身份验证的用户,您只需转发它们并显示错误消息并从客户端终止长轮询,因为它知道它无效,但是如果有效请求,您几乎需要从客户端进行轮询,在PHP中进行身份验证,然后断开连接,但请求保持打开状态 - 我不确定该部分是如何工作的。

任何人都可以解释它应该如何实现,如果可能的话,最好用一个例子吗? 请注意,我不是在寻找HTTP基本身份验证,我需要在MongoDB中查看单独的数据存储进行身份验证。

免责声明:我无法清楚地了解您的4.段落。

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

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

nginx配置:

  • push_subscriber_concurrency first:这样通道只能由目标用户使用
  • push_authorized_channels_only on:不是绝对必要的,但在我看来很好

授权工作流程:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM