2008-09-22 138 views
11

我目前正在建立一個用於工廠/倉庫類型位置的內部Web應用程序。用戶將在幾個人之間共享一臺PC,因此我們需要一個相當短的會話超時時間來阻止人們離開,並將應用程序登錄到其他人可以訪問PC並根據以前用戶的用戶名執行操作。處理Web應用中會話超時的最佳方法?

問題在於,當用戶正在向表單輸入信息時,會話可能會超時,尤其是如果他們需要很長時間。

如何以用戶友好的方式處理此問題?

回答

3

讓服務器瞭解用戶正在主動輸入信息的事實。 例如,如果用戶按下TAB鍵或用鼠標點擊字段,則向服務器發送消息。 最終的解決方案取決於你。

+0

我認爲這對我的情況最好。與彈出對話框並顯示用戶可能不會理解的消息相比,它的侵擾性更小。它不會通過不斷地輪詢服務器而無限期地保持會話活動。 – anon 2008-09-22 13:43:33

2

最好的建議可能是要求用戶在完成後關閉瀏覽器窗口。通過使用會話cookie,會話將在瀏覽器關閉時自動結束,或者在30分鐘超時後自動結束(可以更改afaik)。

由於缺省情況下瀏覽器和服務器之間沒有交互,所以一旦頁面加載完畢,您必須有一個javascript聯繫服務器在窗體頁面的後臺來刷新會話,但似乎有點這麼小的問題太麻煩了。

3

使用Ajax定期藏匿部分填好的表格的內容,因此,如果他們得到由系統引導他們並沒有失去他們的工作。哎呀,一旦你這樣做了,如果他們花時間打字,使用AJAX保持會話不會超時。

1

也許在這種情況下保持活着的JavaScript過程可能會有幫助。如果腳本捕獲了一些關鍵觸發器,它會向服務器發送「我還在打字」消息以保持會話存活。

2

如果會話超時太短以至於用戶沒有時間填寫表單,我會放一個AJAX腳本,每隔幾分鐘向服務器發出一個http請求,以保持會話活動。我只會在用戶必須填寫某些內容或已經開始填充內容的頁面上執行此操作。

另一種解決方案是使用會話超時提醒腳本,彈出對話框提醒用戶會話即將超時。彈出窗口應該顯示一個「註銷」和一個「繼續使用應用程序」,它使ajax請求更新會話超時。

1

你有沒有考慮過把表格分成小塊?

+0

這可能會對用戶有點惱人,但是當用戶搞砸了某些事情時,拆分服務器端驗證對用戶來說可能不那麼煩人。 – CrashCodes 2008-10-01 19:12:31

0

至於技術方案的選擇,你可以讓你的應用程序在每次一個特定的工作是做這樣的方式,例如在填寫表格,你問用戶,如果他想繼續做另外的工作或如果他完成了。 Yould可以有菜單選項的初始屏幕,並且如果用戶選擇他首先必須輸入他的憑證的選項。

或在表單上放一個密碼字段。取決於他們必須填寫多少表格。

0

當用戶帖子的形式和他們的會話超時,你應該確保你保存表單值的地方,然後要求用戶重新登錄。一旦他們重新認證了你,他們可以重新提交表格(因爲他們的數據都不會丟失)。

1

監視超時併發布彈出消息以通知用戶其當前會話將過期並顯示「確定」或「取消」按鈕。確定保持會話進行(即將計數器重置爲另一個5分鐘或10分鐘 - 無論您需要什麼) - 或者 - 取消以允許會話繼續倒數至零,從而結束。
這是處理它的很多方法之一。

0

我開發了一些需要非常長的會話。當用戶坐在機器上並完成他的工作後登錄到頁面上,登出。現在他可以使用系統幾分鐘或幾個小時。爲了使會話保持活動狀態,直到他退出爲止,我使用了javascript的計時器,它將服務器上的當前時間更新爲anthem標籤。

1

使用JavaScript「線程」保持會話打開對我來說是個壞主意。

如果在應用程序前面沒有用戶,則會出現會話超時,以釋放一些資源。

我認爲你應該用更準確的時間來調整會話超時,以填寫「典型的正常使用」形式。

您可能也有積極的:有一個JavaScript警告

  1. 顯示非侵入性的警告(不彈出)給用戶之前超時到期,這不能不說會話即將過期(和給出一個鏈接發送ajax請求來重置超時並刪除該警告 - 這將避免用戶丟失他當前正在輸入的表單),並且還具有第二個JavaScript「線程」,如果該會話已過期,重定向到登錄頁面,並顯示一條消息,說明會話現已過期。

它認爲這是最好的,因爲它避免了用戶無用地填寫複雜的表單,並在用戶離開時處理這種情況。