2012-11-07 56 views
5

Tôi cố gắng để thiết lập thời gian chờ ứng dụng của tôi trên Tomcat 7 ứng dụng server.First Tôi đang thử nghiệm với thời gian chờ của tôi như là một phút trong web.xml nhưTimeout thiết lập trong web.xml không hoạt động trong java

<session-config> 
     <session-timeout>1</session-timeout> 
    </session-config> 

và tôi đang sử dụng HttpSessionListener để đảm bảo Timeout của tôi hoạt động tốt. Tôi đã khai báo lớp sessionListener của mình trong web.xml.

public class HttpSessionChecker implements HttpSessionListener { 

    public void sessionCreated(HttpSessionEvent event) { 
     System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date()); 
    } 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date()); 
    } 
} 

và In web.xml

<listener> 
    <listener-class>com.test.util.HttpSessionChecker</listener-class> 
</listener> 

Nhưng khi khởi động máy chủ của tôi và khởi động ứng dụng của tôi, tôi thấy phiên được bắt đầu vào chỉ trang đăng nhập.

Session ID 934073ED5E9933158995EE5EB680D3F7 created at Wed Nov 07 09:39:13 PST 2012 

và khi tôi ở lại nhàn rỗi trong hơn một phút hoặc một số lần nhiều hơn năm phút nguyên nhân Tomcat không bắn Timeout ngay trong ứng dụng của tôi và nhấp chuột vào một cái gì đó trong phiên ứng dụng của tôi không phải là Expired.Still Tôi có thể điều hướng trang khác.Nhưng khi tôi ở chế độ Nghỉ trên trang đăng nhập hoặc đăng xuất, tôi thấy phiên bị hủy. Nhưng khi một lần đăng nhập được thực hiện và khi tôi đang trong thời gian chờ phiên ứng dụng không xảy ra. Tôi thấy

Session ID 934073ED5E9933158995EE5EB680D3F7 destroyed at Wed Nov 07 09:42:13 PST 2012 

Tôi đang làm gì sai? Và ngay cả sau khi tôi đã đề cập đến <session-timeout> trong web.xml tôi có cần mã số session.invalidate ở đâu đó trong Mã không? Làm thế nào tôi có thể chuyển hướng đến login.xhtml trong phiên bị hủy trong JSF?

+0

Logic tạo phiên của bạn ở đâu? Lần đầu tiên bạn truy cập vào một bean '@ SessionScoped' ở đâu? Trước tiên bạn có kiểm tra các phiên hoạt động trước khi tôn trọng yêu cầu hoặc bạn tạo âm thầm một yêu cầu mới không? – kolossus

+0

Kiểm tra [Xử lý thời gian chờ phiên trên yêu cầu JSF AJAX] (http://stackoverflow.com/q/11203195/1065197) –

+0

@kolossus ... Khi tôi khởi chạy ứng dụng của mình, trang đăng nhập sẽ nhấn Login Bean là Session Scoped. Và tại thời điểm đăng nhập, chúng tôi không kiểm tra bất cứ đâu! (Session.isNew()) .Tôi đoán nó đang tạo một phiên mới. – SRy

Trả lời

7

Bạn không làm gì sai. Một chuỗi nền sẽ kiểm tra mỗi x phút cho, khi các phiên hết hạn. Đây là container cụ thể. Tức là nó không được đảm bảo hết hạn sau thời gian bạn chỉ định. Tôi biết trong tomcat bạn có thể dễ dàng sửa đổi khoảng thời gian kiểm tra này trong tập tin server.xml.

+1

Nhưng tại sao phiên của tôi không bị hủy khi tôi đăng nhập và Bên trong ứng dụng? – SRy

+0

cùng một lý do. Nếu khoảng thời gian kiểm tra lớn hơn giá trị thời gian chờ thì nó sẽ không bị hủy. –

+2

@MarcusBlackhall ở đâu trong tệp server.xml, tôi có phải đặt khoảng thời gian không? – confile

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