2016-09-19 26 views
8

Tôi có giao diện người dùng được phục vụ bởi hai máy chủ HTTP. Vì vậy, tôi cần phải làm sạch phiên HTTP từ cả hai máy chủ. Rất đơn giản đối với trường hợp sử dụng đăng xuất nhưng không rõ ràng đối với tôi cách thực hiện nó cho trường hợp sử dụng hết giờ phiên.Yêu cầu HTTP từ trình duyệt khi hết giờ phiên

Thông báo ở phía máy chủ có thể thông qua HttpSessionBindingListener Getting notification when bounded/unbounded to a HTTP session. Nhưng làm cách nào tôi có thể thông báo cho trang web về nó? Tôi phải gửi yêu cầu từ trình duyệt đến máy chủ thứ hai để có thể xóa cookie phiên trên máy chủ thứ hai và do đó tôi không thể gửi yêu cầu từ phía máy chủ.

Added

Một máy chủ là Tomcat 8, máy chủ thứ hai là máy chủ Apache HTTPD. Tôi muốn giải quyết nó qua UI callback là có thể (từ máy chủ Tomcat HTTP servlet).

+0

Đó có phải là cấu hình máy chủ không? Tôi nghĩ rằng có một cách để cấu hình các máy chủ để chia sẻ phiên. Bạn có thể bao gồm thêm chi tiết về máy chủ bạn đang sử dụng, bao gồm cả phiên bản không? – Kieveli

+0

Câu hỏi hay. Tôi đang chờ đợi để biết thêm chi tiết. Tôi đã so sánh cách tiếp cận này với Spring Session (clustered: http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession-redis) sử dụng một cửa hàng bên ngoài như redis để quản lý các phiên được nhóm. PS: Tôi muốn có một nút đăng ký trên SO cho những câu hỏi như vậy. – code4kix

+0

Kieveli, tôi không muốn định cấu hình bất kỳ phiên chia sẻ nào. Một máy chủ là Tomcat 8, máy chủ thứ hai là máy chủ Apache HTTPD. Tôi muốn giải quyết nó qua giao diện người dùng gọi lại là có thể (từ máy chủ servlet HTTP Tomcat). code4kix, để đăng ký câu hỏi chỉ cần nhấn vào nút dấu sao – Michael

Trả lời

4

Từ Apache HTTPD (Apache) tài liệu:

phiên Tích hợp với các ứng dụng bên ngoài

https://httpd.apache.org/docs/2.4/mod/mod_session.html#integration

  • Bạn có thể viết module của riêng bạn, sau đó bạn có thể sử dụng mô-đun này để xóa phiên sau khi Tomcat cho rằng họ có thể tiêu hao được.
  • Bạn có thể sử dụng cơ sở dữ liệu phiên bên ngoài cả Tomcat và Apache (ví dụ: trong MySQL), cả hai máy chủ sẽ xác thực người dùng với nó. Việc xóa một phiên sẽ chỉ yêu cầu xóa mục nhập khỏi cơ sở dữ liệu.
  • Là một ứng dụng độc lập: Theo trạng thái của tài liệu, bạn có thể thực hiện công việc tìm và truy cập các tệp phiên, chia nhỏ và chỉnh sửa chúng. Nếu Tomcat và Apache nằm trên các máy khác nhau, bạn có thể có một tác nhân với một trình lắng nghe trên hộp Apache và yêu cầu Tomcat xóa tác nhân dữ liệu phiên.
  • Apache thường đi với PHP và cũng có cơ sở dữ liệu xung quanh. Cả hai có thể có phiên riêng của họ để xử lý.
+0

Tôi muốn quản lý các phiên qua cơ sở dữ liệu. Không thể tìm thấy giải pháp trong câu trả lời ở trên – Michael

+1

Tôi sẽ không viết mã, nhưng một lần nữa, có thể bạn sẽ muốn một ứng dụng độc lập chạy trên hộp httpd apache (hoặc ngã ba của apache). Làm cho nó nghe trên một cổng (ổ cắm hoặc các cuộc gọi java). Bất cứ khi nào tomcat xóa một phiên, nó phải gọi chương trình này, chương trình phải xóa phiên httpd phù hợp apache. Không có cuộc gọi khung dễ dàng, bạn phải làm mọi thứ. – gia

+0

Tôi cần gọi lại qua trình duyệt. Tôi có thể phát triển tấn giải pháp thông qua phía máy chủ nhưng tôi cần một giải pháp trình duyệt – Michael

0

Có một số phương pháp bạn có thể thử.

  1. Như đã đề cập bởi @Kwebble, trên thời gian chờ phiên Tomcat thực hiện cuộc gọi đến máy chủ Apache của bạn và yêu cầu nó để đăng xuất/không kích hoạt phiên.

  2. Nếu phiên làm việc hết giờ trong Tomcat, giao diện người dùng sẽ biết về điều đó khi có yêu cầu. Bây giờ từ giao diện người dùng, thực hiện cuộc gọi đến máy chủ Apache để đăng xuất/vô hiệu hóa phiên.

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