0

今天,我們的B2B Web應用程序在閒置6小時後超時用戶會話。如果用戶會話超時,用戶將被重定向到登錄頁面,然後在登錄後(通過發送到登錄頁面的「returnURL」查詢字符串參數)重定向回原始目標。強制重新登錄而不會丟失更改的Web應用程序模式? (不保存草稿)

這對於常規HTTP GET請求非常適用。但是,如果用戶處於長時間的數據輸入操作中,然後回家過夜,該怎麼辦?如果用戶在第二天早上嘗試提交表單,則其更改將丟失。

相反,我想爲表單提供類似的工作流程,就像我們目前獲取GET請求一樣:用戶點擊「保存」,用戶被強制重新進行身份驗證,並且(如果登錄成功),表單將被提交。另一種方法是強制重新登錄,但不要提交表單,只需將用戶放在原始頁面上,以便用戶可以再次嘗試保存更改。

我們需要提交的所有數據都在客戶端 - 這不像我們在會話中存儲的數據會丟失。

是否有一種可接受的模式來處理這種情況?我應該使用window.open彈出窗口並在成功登錄後關閉它嗎?使用覆蓋在頁面上的jQuery對話框?還有別的嗎?

我知道登錄界面經常被web應用程序特別對待,以減少跨站腳本風險以及其他與安全相關的原因,所以不確定是否有一個衆所周知的最佳實踐用於此用例。

處理此問題的一種方法是定期保存用戶工作的草稿,例如StackOverflow。由於成本原因,在我們的案例中並不實際 - 現在我們只是想讓保存更改工作流程適應會話到期。

我們在後端使用ASP.NET MVC(如果它很重要),前端使用jQuery,但我的問題實際上更多地是關於安全和編程最佳實踐,我希望它們是平臺中立的。

回答

0

這取決於收集的數據量,但可能的解決方案可能是使用「localStorage」或「sessionStorage」將頁面狀態保存到瀏覽器的本地存儲。 「localStorage」和「sessionStorage」是Web瀏覽器的屬性,這些屬性以Javascript展示,並且在大多數現代瀏覽器(Chrome,Safari,Firefox,IE 9+)中都受支持。 「localStorage」無限期保存數據,而「sessionStorage」保存數據,直到瀏覽器或當前選項卡關閉。

可能存儲關於頁面所需的所有內容,重定向用戶登錄,然後使用存儲的數據重新加載頁面。

重定向之前登錄:

if (window.sessionStorage) { 
    window.sessionStorage.setItem("firstName", $("#firstNameField").text()); 
    window.sessionStorage.setItem("lastName", $("#lastNameField").text()); 
} 

從登錄retunring後:

if (window.sessionStorage) { 
     $("#firstName").text(sessionStorage.getItem("firstName")); 
     $("#lastName").text(sessionStorage.getItem("lastName")); 
    } 
+0

我希望一個更輕量級的解決方案,例如請客戶在提交表單之前驗證用戶是否已登錄。不得不堅持本地表單數據似乎更難。 – 2015-04-27 19:12:37

相關問題