2012-01-27 77 views
1

這與ASP.Net應用程序有關。該應用程序使用爲頁面設置的特定數據。在此數據設置完成後,此頁面的所有操作都將使用設置的數據。如何檢測/阻止用戶打開新的瀏覽器窗口?

問題是,如果用戶使用競爭數據打開另一個選項卡,它將覆蓋同一會話和同一用戶的較舊數據,從而使第一個選項卡上的操作失效。

我知道建議的方法是重構代碼以消除這種耦合,但這是不可能的。這是另一個討論這個問題的線程,但沒有指定除了重構代碼之外的任何解決方案(http://stackoverflow.com/questions/632062/ways-to-detect-ctrl-n-or-when-a-user-opens - 新窗口)

那麼,我該如何檢測(並通知用戶)或阻止用戶打開另一個選項卡 - 通過javascript/jquery?

回答

1

您可以設置會話變量isActive,並在用戶第一次打開應用程序時將其設置爲true以及所有其他會話數據。在此之後,如果用戶打開另一個選項卡,請檢查isActive是否爲真。如果是,通知用戶並且不要再次設置數據。

在僞代碼,你的邏輯應該流這樣

if (!isActive) 
    //set session data 
else 
    //alert the user: You have another active session 

這將是一個更好的解決辦法,因爲不能保證用戶不訪問的頁面設置會話,然後暫時關閉JavaScript在沒有收到通知的情況下啓動新標籤。

+0

如何檢查用戶是否打開了另一個選項卡? – 2012-01-27 06:35:36

+0

@SidharthPanwar:不知道。如果你實施我的解決方案,你不需要知道。 – xbonez 2012-01-27 06:38:13

+0

我會在哪裏保存你提供的代碼?它會發生什麼事件? – 2012-01-27 06:41:59

1

您應該認識到,您無法防止同一用戶在同一站點上打開多個頁面。用戶可以使用同一臺計算機上的多個不同瀏覽器或不同計算機上的瀏覽器進行此類操作。因此,您真正需要做的就是設計您的應用程序,以便正確處理這種情況或檢測出這種衝突,並確定在發生這種情況時最安全的措施(在服務器上,您可能會忽略來自所有會話的數據,但只有一個,或者你將它們合併在一起)。什麼是安全行動取決於數據是什麼或者它是如何改變的。

最直接的選擇是每次用戶訪問時爲用戶推出一個新的基於服務器的會話,並在服務器上使所有先前的會話無效,因此任何嘗試對服務器進行任何更新的舊會話都將由於會話無效而被拒絕。這可以防止任何類型的多會話數據衝突。

如果您希望能夠在用戶的會話失效時通知用戶,只要該窗口打開並在您的站點上檢查以確認該用戶的身份,就可以對服務器進行慢速輪詢(例如每20分鐘一次)會話有效期,以便您可以在會話過期時通知用戶。

+0

+1明智的回覆:) – 2012-02-01 06:44:50

相關問題