我已經爲Vaadin會話設置了最大不活動時間間隔,如下所示。Vaadin會話setMaxInactiveInterval UI響應不一致
VaadinSession.getCurrent().getSession().setMaxInactiveInterval(60);
添加了會話銷燬偵聽器,如下所示進行測試。
servletService.addSessionDestroyListener(new SessionDestroyListener() {
public void sessionDestroy(SessionDestroyEvent event) {
System.out.println("SESSION TIMEOUT");
}
});
該監聽器在服務器端的所需時間被調用。 但是我不能同時在瀏覽器端看到「Session Expired」消息。通常它會在4分鐘和5分鐘之間顯示。 有沒有辦法以一致的方式同時獲得這兩個。
另請注意,我們並未使用推送功能,目前它不適合我們。
執行客戶端輪詢會重置會話的上次活動時間,並且如果輪詢時間間隔小於maxInactiveInterval,可以保持會話永久保持活動狀態。
感謝您的回答,是的我知道問題是客戶端沒有得到通知。但是,我們正在做這個應用程序沒有推。沒有改變也不是一種選擇,因爲它看起來像會話還沒有過期。強制刷新頁面看起來像是一個選項。但我認爲它不適用於已銷燬的會話,因爲沒有「頁面」這樣的內容,因爲沒有客戶端會話。如我錯了請糾正我。 – Don
使用Page.getCurrent()。reload()(更正了我答案中的方法名稱)應刷新客戶端頁面,因爲即使客戶端Session已過期,與它相關的Page對象仍應存在。在我看來,如果沒有推送,您無法正確通知客戶。我添加了另一個解決方案,我可以解決您的問題。 – Supamiu
是的我也想過在客戶端進行輪詢,看看服務器是否還活着。但它不起作用,因爲輪詢服務器將重置會話的最後活動時間,並且因爲該會話永遠不會超時。 – Don