2009-04-08 79 views
7

Làm cách nào để giới hạn số lượng người dùng vào ứng dụng web.Giới hạn số người dùng truy cập vào ứng dụng ASP .NET trên web

Bạn có thể muốn giới hạn ứng dụng web chỉ xử lý 20 người dùng cùng một lúc. Công ty chúng tôi bán các ứng dụng dựa trên một số giấy phép, nhưng chúng tôi không chắc chắn hành vi có thể là gì trong ứng dụng web.

Tôi đã thấy một số đề xuất cho biết bạn có thể gắn cờ tài khoản người dùng là "LoggedIn = True" khi người dùng đăng nhập. Sau đó, mỗi lần đăng nhập thành công mới sẽ kiểm tra số lượng bản ghi "LoggedIn = True". Nếu nó vượt quá giới hạn, thì người dùng bị từ chối.

Đầu vào không mong muốn sẽ được xử lý như thế nào trong trường hợp này? Có gì nếu:

  • Người dùng không bấm logout và đóng trình duyệt
  • Trình duyệt bị treo, và người dùng không có cơ hội để làm logout
  • phá vỡ kết nối mạng, điện trên máy khách tắt vv vv

Tất cả những điều trên sẽ vẫn có cờ "LoggedIn = True" và đóng góp vào số lượng người dùng đã đăng nhập. Điều này có thể vô tình chặn người dùng được xác thực chính hãng.

Tôi đang tìm kiếm thêm các giải pháp ASP.NET nếu có thể.

Trả lời

4

Giả sử xác thực người dùng của bạn bằng cách nào đó dựa trên phiên, sau đó câu trả lời cho tất cả các trường hợp "không mong muốn" của bạn (sẽ thực sự là chuẩn - mọi người hiếm khi có vẻ đăng xuất khỏi ứng dụng web). phiên làm việc hết giờ. Vì vậy, bạn cần phải điều tra các mẫu sử dụng của ứng dụng của bạn. Nếu bạn nhận được rất nhiều người đăng nhập trong một vài phút, nhưng không có nhiều hơn thế, sau đó một thời gian phiên 30 phút ra có nghĩa là rất ít người thực sự có được để sử dụng ứng dụng.

Vấn đề cơ bản là các ứng dụng web vốn đã bị ngắt kết nối, vì vậy bạn không thể theo dõi những gì người dùng thực sự đang thực hiện giữa các yêu cầu cho một trang. Thông thường, bạn sẽ bán giấy phép cho một ứng dụng như vậy cho người dùng cụ thể (vì vậy nếu một công ty mua 20 giấy phép, điều đó sẽ cung cấp cho họ 20 tên người dùng và mật khẩu). Sau đó, bạn có thể ngăn chặn nhiều đăng nhập bằng cùng tên người dùng và mật khẩu, bằng cách từ chối đăng nhập thứ hai hoặc hủy kích hoạt tài khoản trước đó (có thể là cách tiếp cận tốt hơn trong trường hợp ai đó thực sự di chuyển từ máy này sang máy khác mà không đăng xuất lý do bạn phác thảo).

+0

Thực ra chúng tôi đã cố gắng tránh tùy thuộc vào thời gian chờ nhưng có thể không có giải pháp nào khác. Cảm ơn câu trả lời quá nhanh. –

1

Giải pháp phổ biến nhất là có bộ hẹn giờ hoạt động. Bạn có thể giả định rằng người dùng đang hoạt động sẽ thực hiện ít nhất một yêu cầu trong khoảng thời gian "X" - giả sử 5 phút hoặc lâu hơn.

Bạn có thể thực thi điều này bằng cách đặt yêu cầu không đồng bộ kiểu ajax được kích hoạt khỏi bộ hẹn giờ bắt đầu khi trang tải. Ví dụ: nếu bạn giả định rằng tất cả người dùng đang hoạt động sẽ thực hiện ít nhất 1 yêu cầu mỗi phút thì mỗi trang sẽ yêu cầu trang trống (nhưng không có bộ nhớ cache) sau mỗi phút. Bằng cách đó, miễn là chúng có cửa sổ trình duyệt mở ra, bạn sẽ luôn có hoạt động từ người dùng đó. Một lần nữa, điều này được xử lý bởi các yêu cầu không đồng bộ, không phải bởi bất kỳ loại chỉ thị tải lại nào. Điều này làm cho nó hoàn toàn minh bạch cho người dùng.

Là phần thưởng bổ sung, hãy xem liệu bạn có thể yêu cầu ajax đó kéo xuống một số thông tin hữu ích, thay vì chỉ thực thi các giới hạn cấp phép.

+0

Tylerl: Giải pháp này có tránh được bất kỳ thời gian chờ phiên thực nào không? Ý tôi là, nếu người dùng giữ trình duyệt của mình mở nhưng không làm gì trên ứng dụng web, anh ấy sẽ không bao giờ bị ngắt kết nối, ngay cả khi anh ấy đạt đến 30 phút. giới hạn thời gian chờ, phải không? –

+0

Nó có thể làm việc tuy nhiên bạn muốn. Sau 30 phút w/ngồi dậy, anh ta CÓ ĐƯỢC CUNG CẤP để hết thời gian hay không? Bạn có thể mã nó để xảy ra một trong hai cách. Hãy nhớ rằng, bạn có thể đặt URL tiếp tục sống ngoài tầm nhìn bình thường của quản lý phiên. Tuy nhiên, đây không phải là dự án "người mới bắt đầu". – tylerl

+0

Có, anh ta phải hết thời gian chờ sau 30 phút. Tôi hiểu rằng để làm cho nó hoạt động như thế này tôi phải gửi yêu cầu ajax bên ngoài phạm vi ứng dụng web của tôi? Hoặc có cách nào khác để ngăn yêu cầu này đặt lại hẹn giờ phiên không? –

0

Khi David chỉ ra vấn đề chính là phân biệt giữa người dùng không sử dụng và người dùng đã rời khỏi ứng dụng của bạn.

Một giải pháp có thể là giữ thời gian chờ phiên thấp (nói 1 hoặc 2 phút) và sử dụng chức năng gọi lại để duy trì phiên hoạt động cho người dùng không sử dụng. Sau đó, bạn có thể tăng một truy cập trong Session_Start và giảm nó trong Session_End và sử dụng nó để theo dõi số lượng các phiên hoạt động. Nếu số lượng phiên hoạt động vượt quá giới hạn của bạn, bạn sẽ chuyển hướng người dùng mới đến trang từ bỏ phiên và cho người dùng biết rằng bạn có quá nhiều khách truy cập vào lúc này.

Các vấn đề liên quan