2011-06-23 28 views
6

Tôi có triển khai HttpSessionListener nơi tài nguyên 'bị khóa' trong ứng dụng được phát hành với phương thức sessionDestroyed.HttpSessionListener - Phương thức sessionDestroyed có được gọi là thời gian chờ của phiên không?

Thông tin 'khóa' được duy trì trong cơ sở dữ liệu và việc giải phóng ổ khóa hoạt động tốt trong hầu hết các trường hợp. Nhưng trong một số trường hợp, tôi vẫn thấy tài nguyên bị khóa - ngay cả khi không có phiên nào hoạt động!

Vì vậy, tôi nghi ngờ nếu có khả năng sessionDestroyed không được gọi? Giả sử nếu phiên đã hết thời gian - phương thức sessionDestroyed có được gọi không?

Giả sử người dùng đóng tab trình duyệt mà không cần đăng xuất (hủy phiên) thì người nghe có được gọi không?

Cảm ơn trước!

Trả lời

2

Công cụ servlet sẽ xử lý hết thời gian chờ của phiên. Nó sẽ tự xác định khi phiên không còn hợp lệ và nó sẽ gọi số sessionDestroyed. (điều này có thể xảy ra một thời gian sau khi người dùng đóng trình duyệt của mình).

Một số điểm khác:

Logging

Có lẽ bạn có thể thêm một số khai thác gỗ với các phương pháp sessionCreated và sessionDestroyed. cho mỗi phiênCreated bạn nên có một sessionDestroyed.

Excepion Xử lý

Có lẽ thực tế là thứ vẫn bị khóa là không phải do phiên không bị phá hủy, nhưng có lẽ do một lỗi trong logic sessionDestroyed của bạn. Bạn có đủ xử lý ngoại lệ/đăng nhập tại chỗ không?

Timing

Bạn đã chờ đợi đủ lâu để kiểm tra tài khóa của bạn? (đóng tất cả các máy khách và tính đến giá trị thời gian chờ của phiên được cấu hình trên ứng dụng/máy chủ). Như đã nói ở trên, máy chủ không thể phát hiện người dùng đóng trình duyệt, nhưng nó vẫn duy trì danh sách các phiên http và nó sẽ hủy chúng sau khi hết thời gian chờ.

+0

Cảm ơn ddewaele! Xử lý ngoại lệ đã làm các trick. Tôi đã không bắt gặp một ngoại lệ cơ sở dữ liệu. Sẽ kiểm tra ứng dụng khi ngoại lệ được xử lý và xác minh kết quả. – Ajay

1

Vì vậy, tôi nghi ngờ nếu có khả năng sessionDestroyed không được gọi? Giả sử nếu phiên đã hết thời gian - phương thức sessionDestroyed có được gọi không?

Có. Một phiên bị hủy khi nó hết hạn hoặc một người nào đó hết hạn theo chương trình (qua số HttpSession.invalidate()).

Giả sử người dùng đóng tab trình duyệt mà không cần đăng xuất (hủy phiên) thì người nghe có được gọi không?

Không, vì phiên vẫn hợp lệ. Nếu người dùng đã nói mở trang web một lần nữa, phiên của họ sẽ vẫn hợp lệ.

Từ HttpSessionjavadoc:

Notifications được gửi đi sau khi các phương pháp ràng buộc đầy đủ. Đối với phiên không hợp lệ hoặc hết hạn, thông báo được gửi sau khi phiên đã bị vô hiệu hoặc hết hạn.

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