2010-11-24 8 views
6

Vì vậy, tôi đang xem xét việc kiến ​​trúc một ứng dụng sử dụng nginx với mô-đun nginx-http-push-và PHP-FPM, và sau rất nhiều cấu hình thú vị, tôi đã làm việc với điểm xử lý các trang PHP.Phiên làm việc/xác thực hoạt động như thế nào với nginx/NHPM/PHP-FPM?

Điều tôi không nhận được, là cách các phiên được cho là hoạt động - tất cả các ví dụ tôi đã thấy cho nginx + NHPM chạy qua hệ thống nhà xuất bản, nhưng không bao giờ rõ ràng điều gì sẽ xảy ra nếu kênh thuê bao sẽ có hiệu lực, độc đáo đối với người đăng ký. Hãy suy nghĩ về một hệ thống trò chuyện với một kênh công cộng và một kênh riêng cho mỗi người dùng, ví dụ.

Bây giờ, trong một thiết lập PHP thông thường, bạn sẽ chuyển cookie sang PHP, tra cứu từ đó và xử lý phần còn lại của trang dựa trên việc người dùng có được xác thực hay không, nhưng với PHP- FPM và bỏ phiếu dài, có vẻ như nó không hoạt động như thế.

Tôi có thể hiểu nếu yêu cầu là người dùng không được xác thực, bạn chỉ việc đổ chúng với thông báo lỗi và chấm dứt cuộc thăm dò ý kiến ​​từ khách hàng biết rằng nó không hợp lệ, nhưng với yêu cầu hợp lệ, bạn gần như cần thăm dò ý kiến từ máy khách, xác thực trong PHP, sau đó ngắt kết nối nhưng để lại yêu cầu mở - và tôi không chắc nó hoạt động như thế nào.

Bất cứ ai có thể giải thích cách nó phải đạt được, lý tưởng với một ví dụ nếu có thể? Xin lưu ý rằng tôi là không phải tìm kiếm xác thực HTTP cơ bản ở đây, tôi cần xác thực để được tra cứu dựa trên bộ nhớ dữ liệu riêng biệt có trong MongoDB.

Trả lời

2

Tuyên bố từ chối trách nhiệm: Tôi không thể hiểu rõ đoạn 4. của bạn.

Theo như tôi có thể nói, vấn đề chính với xác thực trong NHPM là ứng dụng PHP nhận được thông báo hoàn toàn bằng không về các kết nối đến. Phần Comet của thiết lập của bạn là chỉ ghi cho PHP.

Một giải pháp có thể có sau, tôi sẽ cố gắng thực hiện điều này trong những ngày tiếp theo.

cấu hình nginx:

  • push_subscriber_concurrency đầu tiên: để kênh chỉ có thể được sử dụng bởi người dùng
  • dành push_authorized_channels_only trên: không thực sự cần thiết, nhưng tốt để có trong quan điểm của tôi

Quy trình ủy quyền:

  1. Khách hàng gửi thông tin đăng nhập qua các yêu cầu cũ thời
  2. Máy chủ xác thực và tạo mã thông báo (id kênh). Tạo kênh và phản hồi bằng mã thông báo.
  3. Khách hàng cố gắng mở cuộc thăm dò ý kiến ​​dài đến kênh đã cho.
    • Nếu không thành công (có thể do kênh bị tấn công), nó sẽ báo cho máy chủ biết rằng kênh đó quá hạn chế. Hãy nhớ rằng chúng tôi sử dụng các yêu cầu lỗi thời ở đây, vì vậy bạn có thể sử dụng bất kỳ phương thức xác thực nào. Máy chủ xóa kênh. Quay lại bước hai.
    • Nếu kết nối thành công (có thể bạn sẽ không biết điều này, chỉ khi kết nối không thành công), kênh có thể được coi là xác thực.

Lưu ý rằng nếu ứng dụng của bạn nên có thể truy cập từ nhiều trang trong cùng một trình duyệt với tên đăng nhập tương tự, sau đó bạn sẽ cần phải chuẩn bị cho nhiều kênh cho mỗi người dùng.

+0

Vâng, tôi nghĩ bạn đã xác nhận những gì tôi đã đoán. Tôi đã nghĩ rằng bạn vẫn đang cố gắng xác thực trên mỗi cuộc thăm dò dài bằng cách sử dụng cookie thông thường và đã suy nghĩ rất nhiều về tình huống thông thường trong PHP, nơi bạn xác thực trên mỗi yêu cầu và không thành công trang lỗi trên xác thực không hợp lệ hoặc xuất trang như bình thường. Nhưng với NHPM, bạn không xuất hiện câu trả lời theo cách đó vì vậy tôi tự hỏi làm thế nào bạn có thể xác thực với PHP-FPM. – Arantor