2008-12-01 42 views
0

我正在爲我的客戶端應用程序使用GWT。我沒有爲服務器使用GWT/Java。但是,我不確定我如何處理會話管理。 GWT應用程序駐留在一個頁面上,所有服務器調用都通過AJAX完成。如果會話在服務器上過期...讓我們假設用戶沒有關閉瀏覽器,但讓應用程序保持打開狀態,我的服務器如何通知應用程序會話已過期,並且客戶端部分應該顯示登錄屏幕再次?GWT中的會話管理而不使用服務器上的Java?

客戶端會話管理的含義是什麼?這似乎固有不安全。

我不是在尋找代碼。我正在尋找想法,技術,潛在的解決方案等。我考慮過彗星http://en.wikipedia.org/wiki/Comet_(programming),但是如果不在服務器端使用Java,這看起來不會很好。也許我錯了?我不想輪詢服務器。

任何想法或見解?

回答

1

不知道你怎麼做你的RPC工作,它很難給出很好的建議。

如果你的AJAX服務要求驗證用戶(即具有有效的會話),它是確定只需發送一個401錯誤,指出用戶是無效的。客戶端可以將401錯誤解釋爲應該設置用戶重新進行身份驗證的消息。

+0

我沒有使用RPC,GWT請求對象只是XMLHttpRequest的一個包裝。好想法!我從來沒有想過改變http狀態碼。我最終可能會使用它。 – 2008-12-01 22:46:50

0

如果會議服務器端過期應該發生什麼,那麼下一次客戶端向服務器發送請求時,它會創建一個新的會話,或者更可能的是,發回了一個短信給客戶端它試圖訪問沒有會話的頁面,並將它們發送到登錄屏幕。但是,您仍然需要等到客戶端向服務器發送消息。

1

我們在我們的應用程序來處理這一點,通過檢測時發回重定向到登錄屏幕的服務器(它會來通過響應Ajax調用),並再次彈出一個對話框,要求用戶的口令,但是預先填寫了他們的用戶名。然後,我們將它發佈到登錄頁面所在的相同位置,就好像它是登錄頁面一樣,因此用戶自動登錄到此新會話。最後,我們再次重新提交ajax調用,這對用戶來說是一個無縫過程(例如:他們不必再次單擊該操作)。

由於我們存儲在客戶端上的所有國家,而不是在會話變量,我們沒有試圖存在於會話數據的任何問題。