2012-07-23 96 views
2

我絕對需要一個用戶註銷他/他用來訪問我們的數據庫的網站。如果沒有註銷,並且簡單地關閉瀏覽器,則系統將用戶名鎖定一小時。 我沒有實現它,它只是它的工作方式。阻止用戶關閉Firefox

我想寫一個簡單的C#程序,它會以某種方式檢測用戶是否註銷,如果沒有,阻止他們關閉瀏覽器。

1)是否有Firefox API或者其他方式來讀取firefox.exe進程中的網站內容?

2)當用戶點擊'X'關閉瀏覽器時,是否可以終止firefox.exe進程的終止? (可能這是交易中斷的問題)。

我會很感激任何提示。謝謝!

+0

您是否對用戶系統的每個方面都有100%的控制權?如果你不這樣做,那麼你想要的是邏輯上不可能的。改變系統的工作方式會更容易,然後改變Firefox與網站的交互方式。簡單的解決方案是設置FireFox在關閉時清除所有Cookie。如果添加addtional(有用)信息,我會考慮刪除downvote。 – 2012-07-23 14:58:35

+1

考慮如果用戶與網絡斷開連接會發生什麼情況:這與關閉瀏覽器的效果相同嗎?如果它確實如何防止斷開連接(或等同於暫停機器等)。 – Richard 2012-07-23 14:58:45

+0

我非常懷疑你可以阻止用戶關閉Firefox。即使你可以,我想象啓發式反病毒/反惡意軟件程序會將其標記爲潛在惡意。 – saluce 2012-07-23 14:59:23

回答

10

如果您使用的是身份驗證,則每個用戶都應該有一個會話。會話可以配置爲過期。你所需要做的只是處理一個合適的session expire event

不要找任何黑客以處理瀏覽器退出事件 - 這是一條危險的道路:

  • 每個人都討厭它,也沒有機會,你可以把它可靠,即在新版本工作的瀏覽器,在不同的操作系統支持多種瀏覽器等
  • 這可以在Firefox的Mozilla(sample)工作,但可能無法在IE或Chrome
  • 工作
  • 應用程序可以通過OS被殺死,所以瀏覽器事件將不會有機會火和您的處理代碼將不起作用
1

您無法阻止用戶使用合法方法關閉程序。這是出於明顯的安全目的。

2

你不能阻止用戶關閉Firefox,因爲有很多方法可以關閉,不能被你的代碼控制(例如,從taskmon中殺死進程)。但是,您可以在代碼(window.onClose()事件)中檢測到關閉事件並執行註銷過程。

但是,在firefox(或其他任何瀏覽器)的情況下,被殺死而不是被關閉,window.onClose()將不起作用。所以最好是在服務器端處理會話,而不是依賴於客戶端的行爲。

2

你可以做的是使用JavaScript來檢測瀏覽器關閉或離開你的網站,並在這些情況下觸發一個方法或擊中一個web服務,將它們註銷。非常快速,非常簡單,並且可以跨瀏覽器使用。

0

我同意oleksii。但是,您可以讓用戶關閉Firefox變得不那麼容易。

我目前正在編寫一個加載項(通過SDK),它監聽「quit-application-requested」Observer Notification並將aSubject.data設置爲true,以防止Firefox退出應用程序。

observe: function(aSubject, aTopic, aData) { 
    if (aTopic == "quit-application-requested") { 
     aSubject.QueryInterface(Ci.nsISupportsPRBool); 
     aSubject.data = (this.canQuit() == false); 
    } 
    } 

但是其實我是想爲某個窗口不關閉,如不關閉網絡應用程序(的FileMaker數據庫)。

所以我也嘗試禁用所有的命令,所有按鍵和所有的菜單(瀏覽器XUL),像這樣:

var allCommands = win.document.getElementsByTagName("command"); 
for (let i = 0; i < allCommands.length; i++) { 
    allCommands[i].setAttribute("disabled", "true"); 
} 

var allKeys = win.document.getElementsByTagName("key"); 
for (let i = 0; i < allKeys.length; i++) { 
    allKeys[i].setAttribute("disabled", "true"); 
} 

var allMenus = win.document.getElementsByTagName("menu"); 
for (let i = 0; i < allMenus.length; i++) { 
    allMenus[i].setAttribute("disabled", "true"); 
} 

但用戶仍可以退出應用程序,從而與Web應用程序關閉窗口除非我阻止打開新的Firefox窗口。

所以「它」的作品,但我希望他們仍然瀏覽,而不是關閉選項卡駐留的特定選項卡或窗口。

不禁止打開新窗口,它不起作用,因爲顯然當用戶打開一個新窗口,然後當用戶按下Alt + F4時,它不會是一個應用程序退出,但窗口關閉。雖然我以爲我已經禁用了所有的命令/鍵/菜單,但仍然存在某種接近的可能性。

有沒有人有任何想法如何做到這一點,而不阻止打開新窗口?