2012-07-23 207 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时,它不会是一个应用程序退出,但窗口关闭。虽然我以为我已经禁用了所有的命令/键/菜单,但仍然存在某种接近的可能性。

有没有人有任何想法如何做到这一点,而不阻止打开新窗口?