2013-10-24 80 views
0

Iam在卸載之前使用下面的代碼註銷用戶。 我有三個級別的身份驗證,在我注入此代碼的二級身份驗證頁面。如果用戶是2因素認證用戶,用戶將停止在我注入代碼的頁面,如果用戶關閉瀏覽器用戶將被註銷/會話將被終止。 但是,如果用戶正在通過2級身份驗證,我會在您註銷並且用戶能夠登錄時看到彈出窗口。我需要的是:在緊密事件中,只有彈出窗口才會出現。jquery註銷功能

我使用了window.onbeforeunload,window.onunload和所有其他選項,它不適用於某些瀏覽器。 請建議。

var timeoutID; 
$(window).bind("beforeunload", function(){  
    logout(); 
    timeoutID = window.setTimeout(displayMessage(),500); 
}); 

function logout() { 
    window.location.href = "logout url"; 
} 

function displayMessage(){ 
    window.alert("You are loggedout"); 
} 
+0

您不能在'beforeunload'事件上重定向用戶。發送一個非異步ajax請求到腳本,而不是註銷用戶。更好的是,使用會話cookie。 – SeinopSys

回答

0
timeoutID = window.setTimeout(displayMessage(),500); 

應該是:

timeoutID = window.setTimeout(displayMessage,500); 

的第一個參數setTimeout必須是一個函數。你正在調用函數而不是傳遞函數本身。這就是爲什麼警報彈出。

但是,由於您在beforeunload處理程序中可以執行的操作的限制,這仍然有效。這只是爲了向您展示創建超時函數的正確語法。

+0

您不能在beforeunload中使用計時器,因爲該頁面在運行之前將被關閉。 – jfriend00

+0

@ jfriend00謝謝。我更新了答案,以清楚表明我只是幫助他理解正確的'setTimeout'語法,而不是它實際上會解決他的最終問題。 – Barmar

+0

沒有運氣。當我現在關閉窗口時,它不顯示彈出窗口。通過顯示這個彈出窗口,我將有時間在後端終止會話。所以爲此我添加了setTimeout。任何其他備用解決方案 – user2914481

0

有兩件事情你不能在beforeunload處理程序做的是:

  1. 將用戶重定向到一個不同的頁面(不是瀏覽器允許)。
  2. 設置一個將在未來某個時間運行的計時器(該頁面已經關閉,因此沒有將來的時間)。

因此,您在beforeunload處理程序中嘗試執行的任何操作都不起作用。 (僅供參考,前期也有其他限制,例如你不能使用prompt()alert()等等,但這些是你正在做的兩件事)。

你不說如何登錄/註銷被跟蹤,所以我們很難確切地知道該建議什麼。會話cookie將在瀏覽器關閉時自動失效。常規cookie可以在您的beforeunload處理程序中輕鬆清除。