WebObjects/Web 应用程序/开发/回溯
外观
当使用 WebObjects 的组件操作时,为了能够跨请求保留状态,服务器必须维护一个先前访问页面的缓存。 此页面缓存的大小有限。 因此,如果用户多次按下后退按钮,以至于耗尽此缓存,将导致“用户回溯太远”错误。
因为直接操作不需要像组件操作那样的页面状态,所以避免回溯问题的最佳方法是在应用程序中使用 编程:WebObjects/Web 应用程序/开发/直接操作。
如何最简单地阻止用户回溯(使用浏览器后退按钮)到先前由已注销的另一个用户使用的页面?
为了防止用户在使用后退按钮时访问他人的会话,您应该在注销操作中调用 session().terminate()。 为了使其正常工作,您必须在调用 terminate() 后重定向到没有会话的页面,因为如果您使用 pageWithName() 返回另一个页面,该页面将引用您刚刚终止的会话,并且它将无法工作。 我的注销操作看起来像这样
public WOComponent logout() { WORedirect redirect = (WORedirect)pageWithName("WORedirect";); redirect.setUrl("/cgi-bin/WebObjects/MyApp";); // entry point session().terminate(); return redirect; }
如果有人使用后退按钮,这将阻止会话工作,但它不会阻止他们查看页面上的内容。 如果敏感内容是问题所在,那么最好的办法是在用户注销时关闭窗口。 这将假设当他们登录时,您为要运行的应用程序的敏感部分打开了窗口。 这样,当您使用 javascript 关闭它时,您不会触发用户可以拦截的警告消息。 对于您打开的窗口,您可以像上面一样重定向到一个看起来像这样的 html 页面
<HTML> <HEAD> <TITLE>Closing Window...</TITLE> </HEAD> <BODY onLoad="window.close()"> </BODY> </HTML>
然后就不会有可以返回的页面了。