2016-10-04 96 views
0

我們使用Liferay來管理portlet和會話,其餘的應用程序是使用angular構建的。其內部的portlet是單頁面應用程序。我們面臨的問題是,當會話超時並執行ajax請求時,liferay不會重定向用戶。如果用戶導航到某個其他portlet或重新加載頁面,liferay會確定會話已超時,但如果用戶單擊頁面上的某個鏈接(不會導致頁面重新加載),liferay將不會識別該會話已超時。如何檢查Liferay會話是否在Javascript中超時?

要解決此問題,我試圖識別使用JavaScript代碼,如果生命週期會話是有效的。我能夠訪問我的JS中的Liferay.Session對象,但不知道我可以使用什麼函數或字段來確定會話是否有效。

有人可以幫助我嗎?

下面是我們訪問Lieray會話時使用的代碼。

AUI().use('liferay-session', function(A) { 
    //Liferay.Session 
    //some logic 
} 

我們使用的是Liferay 6.0.2。

回答

0

考慮您可以將門戶設置爲自動自動延伸會話時間。會議永遠不會過期。

設置與此自定義值

session.timeout.warning=0 
session.timeout.auto.extend=true 

這可能是您的應用程序真實的情景一個portal-ext.properties文件?

0

您可以通過AJAX調用進行輪詢,並從Java代碼中檢索會話的狀態,或者創建一個隱藏字段,並保留每個頁面加載時的剩餘時間。 然後在Javascript中進行從當前時間的減法,並且在用戶超時的情況下,您可以執行任何您想要的操作。

是一種粘性方法,但可能對您的問題有用。

0

既然你有機會獲得Liferay.Session對象,你應該能夠做到這一點,以獲得會話的狀態:

Liferay.Session.get('sessionState'); 

它將會話是否仍處於活動狀態返回「活動」。