簡體   English   中英

在會話到期時關閉彈出窗口

[英]Closing popups on session expiry

事情就是這樣:我的webapp有大量的彈出窗口,我的老板希望他們在會話到期時關閉,因為當會話到期並且用戶在彈出窗口上按下刷新時,他會顯示登錄頁面 - >用戶登錄 - >用戶指向儀表板。 現在,彈出窗口中的儀表板屏幕完全不酷。 這是谷歌給我的地方:

有javascript關閉popup onload。 如果會話已過期,則將此onload腳本生成到響應中(從jsp檢查會話到期並有條件地包括onload腳本)。

你認為這是一個好方法嗎? 這種情況的最佳做法是什么?

PS:我不允許使用AJAX

最好的方法是檢查登錄並在需要時關閉它們的XMLHTTP請求 - 定期執行此操作。

精明的讀者(意思是每個人)都會注意到這是一個AJAX請求,但是如果你這樣說它可能會被接受為任何人說你不允許使用AJAX'顯然是個白痴。

在過去的生活中,我制作了一個彈出管理器對象來維護窗口打開的東西。 如果還沒有完成,你應該制作其中一個。 然后,您可以使用setTimeout在經過這么多分鍾(或者您想要的任何時間)之后調用函數。 這將檢查最近的活動(可能通過AJAX)並在確定會話已過期時關閉彈出窗口。 如果沒有,請使用新時間再次調用setTimeout ,並針對最近的活動進行適當調整。

在AJAX編輯之前^^。

好吧,因為你不能使用AJAX,你能在網址中放一些能告訴你彈出窗口的內容嗎? 然后,當用戶點擊重新加載時,您將知道不顯示登錄屏幕。

如果你的老板要求你實現這一點,而不使用AJAX,那么你就麻煩了。 他應該明白瀏覽器與服務器的唯一連接(不刷新頁面)是javascript(他理解為ajax)。

執行此操作的最佳方法是在頁面上設置腳本,以詢問服務器用戶是否仍然每30秒左右登錄一次。

setInterval(function(){
  $.get("loggedin.php", function(result) {
    if (!result.isLoggedIn)
      window.close();
  });
}, 30000);

該腳本假設您正在使用jQuery框架來快速開發JavaScript解決方案。 這也使用JSON(Javascript Object-notation)來測試loggedin.php文件的返回值。

最重要的是,您需要使用AJAX。 告訴你的老板別無他法。 如果他仍然沒有得到它,請他平衡他的支票簿而不使用數學。

在Web應用程序中實現模式對話框的另一種方法是:

  1. 在DIV中建模對話框,默認樣式為display:none;
  2. 在所需的操作上,將模態對話框DIV注入/附加到頁面源中
  3. 重置CSS顯示以使模態對話框DIV可見,通過設置CSS z-index屬性覆蓋在頁面頂部
  4. 成功執行或用戶取消后,模態對話框將消失

由於模式對話框是頁面源的一部分,因此當會話超時時,對話框將消失。 這種方法不會產生支持窗口,當海報試圖解決時,這些窗口可能是孤立的。 它符合不使用AJAX的要求。

你可以手工編寫這些代碼,但我不推薦它,因為必須支持各種瀏覽器。 我建議看看雅虎用戶界面 您可以根據自己的需要定制它(IE:僅模態對話框),如果需求發生變化,它將支持AJAX。

注意從模態對話框中產生模態對話框。

理論上,您可以通過使用隱藏的Flash小部件來避免AJAX ...

但更實際的是,AJAX是“正確”的解決方案,我認為你必須與老板交談,確定這個“沒有AJAX”規則的來源,並說服他說AJAX是解決這個問題的最佳方法。

他認為AJAX需要花費太多時間來實現嗎? 如果是這樣,你應該證明他錯了。 他認為難以維持嗎? 如果是這樣,請說明執行此操作的代碼有多簡單,以及常見的AJAX庫的使用范圍。 如果你的老板是合理的,那么他的目標是最好的產品,你應該能夠與他合作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM