Javascript有替代品onUnload
吗?我使用带有Servlets的JSP Jakarta Struts框架。
我必须知道,什么时候关闭窗口,因为不是每个人都点击注销按钮。
您如何在应用程序中处理它?
Javascript有替代品onUnload
吗?我使用带有Servlets的JSP Jakarta Struts框架。
我必须知道,什么时候关闭窗口,因为不是每个人都点击注销按钮。
您如何在应用程序中处理它?
一般来说,不可能最终确定访问者是否仍在“使用”(甚至查看)您的页面。一旦浏览器下载了页面,它就不再与服务器联系,因此页面可能会保持打开几秒钟或几年,而服务器将不知道。
该unload
事件当然是一个有用的线索,因为它通常在页面卸载时触发。然而,这根本不可靠。有很多情况下它不会触发,还有更多的情况即使它触发了你的服务器也不会意识到它。
例如:浏览器(甚至操作系统)可能会崩溃,或者电源可能会熄灭。使用 Wi-Fi 的访问者可能会断开连接,或者在使用您的网站时可能会将她的 iPhone 带入隧道。
对此的标准解决方法——我们都承认这很糟糕——是让访问者的会话超时。即使在高风险的银行网站上,您也会发现,如果您离开计算机四分钟然后回来,您仍然可以访问,但如果您离开五分钟,您就会被锁定。
这种设置肯定会发现很多误报:访问者仍在使用您的页面而没有与之交互的情况,因此超时给您带来不便。它还允许误报:真正的访问者已经离开,恶意用户在超时期限内接管的情况。
我们最近看到的该方案的唯一主要补充是利用 JavaScript 在超时期限后明显地注销用户。再次,我们在银行网站上看到了这一点:让页面打开太久,当你回来时,你会看到一个登录屏幕。(当然,这也依赖于 JavaScript,因此仍然是错误的。)
不幸的是,由于 HTTP 是一种无状态协议,我们永远无法确定浏览器中发生了什么(尤其是在 JavaScript 关闭的情况下),所以我们可以使用廉价的解决方法。
您应该知道 Opera 不会像您所怀疑的那样执行 onUnload。而且你不应该依赖 javascript 来查看用户是否关闭了窗口。
我依靠 servlet 会话超时来自动处理注销。您可以在会话超时时注册一个处理程序,以涵盖您需要执行的任何凭证清理。这里给出了一个很好的例子:
http://www.xyzws.com/Servletfaq/when-do-i-use-httpsessionlistener/7
客户端不保证用户将始终确认他们已完成使用您的网站。