簡體   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