Tôi đã triển khai cảnh báo hết thời gian phiên bằng javascript chỉ đơn giản yêu cầu người dùng nếu họ muốn kéo dài phiên hoặc đăng xuất của họ. Vấn đề là đây là một cổng thông tin mạng nội bộ, nơi người dùng thường sẽ có nhiều cửa sổ trình duyệt hoặc tab mở cùng một lúc với ứng dụng. Hiện tại, họ sẽ được nhắc nhở rằng họ sắp bị đăng xuất khỏi mọi cửa sổ trình duyệt. Làm cách nào để tôi có thể làm cho mã thông minh hơn để phát hiện rằng họ đang tích cực sử dụng một phiên trình duyệt khác?Làm thế nào bạn có thể hiển thị cảnh báo hết thời gian phiên đủ thông minh để xử lý nhiều trình duyệt hoặc tab đang mở
Trả lời
Bạn sẽ phải kiểm tra trạng thái phiên trên máy chủ bằng cách sử dụng Ajax và theo dõi tất cả các phiên/cửa sổ mở mà người dùng có. Sau đó, bạn có thể chỉ nhắm mục tiêu một trong các phiên có sẵn với cảnh báo đăng xuất.
Đáp lại bình luận của bạn:
Không sử dụng được xây dựng trong cơ chế phiên, đưa ra của riêng bạn sử dụng một mảng presistent server-side hoặc một bản ghi cơ sở dữ liệu.
Không, không có gì trong yêu cầu HTTP cho bạn biết số lượng trình duyệt đang mở, nhưng bạn có thể gán cookie sessionID của riêng mình khi người dùng mở mỗi cửa sổ trình duyệt. Thực hiện cuộc gọi Ajax tới máy chủ, xem liệu người dùng đã hết thời gian chưa, và nếu bạn là mục nhập thấp nhất (hoặc cuối cùng) trong nhật ký phiên thì bạn là trình duyệt nhận cảnh báo.
2 suy nghĩ: 1) cách kiểm tra trạng thái phiên của ứng dụng .NET mà không thực sự mở rộng phiên? 2) có thực sự là một cách để cho biết có bao nhiêu cửa sổ trình duyệt mà người dùng có? Không có gì trong yêu cầu http cho bạn biết điều này – Joel
Có chức năng cập nhật phiên được gọi khi người dùng thực hiện một hành động, không gọi hàm khi bạn đang kiểm tra trạng thái phiên. Bạn có thể phát hiện có bao nhiêu trình duyệt được mở dựa trên chuỗi tác nhân, đừng nghĩ rằng bạn có thể phát hiện các cửa sổ/tab của mỗi chuỗi. – Adam
Tôi không hiểu làm thế nào mà sẽ làm việc.Ngoài ra, nếu họ đang sử dụng các trình duyệt riêng biệt (như IE và FF) hoặc thậm chí là các phiên bản riêng biệt của cùng một trình duyệt thì chúng có các phiên khác nhau nên đây không phải là vấn đề. – Joel
Điều này có hiệu quả không?
Lưu trữ cookie Javascript và kiểm tra để xác định xem phiên đã được mở rộng trong một tab khác chưa?
trông như thế này làm việc ...
Sau 4 năm điều này vẫn có vẻ giống như câu trả lời đúng, cho ASP.NET ít nhất. Vấn đề là bạn cần kết hợp các phương pháp tiếp cận phía máy khách và phía máy chủ, và tôi nghĩ bạn không thể có được phía máy chủ (vì bạn có thể theo dõi đăng nhập/đăng xuất hoặc bắt đầu/kết thúc phiên, nhưng không phải khách hàng- hoạt động phụ mà máy chủ không biết). Tôi nghĩ vì vậy bạn cần chính xác những gì bạn đang đề xuất ở đây. Tôi sẽ đăng nó khi tôi đã làm cho nó hoạt động. – philw
Bạn không thể đếm trên tất cả các tab/cửa sổ để trở thành một phần của cùng một phiên, bởi vì họ có thể được sinh ra và chứa trong các quy trình riêng biệt và bạn không có kiểm soát nhiều hơn thế.
Nhưng nếu mã của bạn tham chiếu đến một cookie Javascript, bạn có thể kiểm tra trạng thái phiên giả của bạn thông qua một postback (AJAX đồng bộ hoặc không đồng bộ). Nhưng sau đó bạn phụ thuộc vào cookie được bật trên trình duyệt của người dùng.
Đây là một câu hỏi thú vị và rất thực tế. Tôi sẽ theo dõi phản ứng với điều này vì tôi không có câu trả lời ngay lập tức :) –
Không biết tại sao điều này lại bị bỏ phiếu. – MusiGenesis
Vâng, tôi cũng rất ngạc nhiên. Tôi đã bình chọn nó lên, Ngoài ra kể từ khi Joel là mới để SO, ông đã không làm bất cứ điều gì sai trái để ngăn cản anh ta bằng cách bỏ phiếu xuống :) –