通常情况下,写基于session的logout问题,都是吧对应的session.removeAttribute移除,然后再session.invalidate();
问题提出:由于浏览器都提供了,back按钮,所以即便是执行了该代码也可能被恶意用户通过点击“后退”按钮看到相应的数据。这在有些情况下是允许的,但是很多情况都是不允许的,也是有违初衷的。
分析原因:浏览器的缓存。
解决方法:通过服务端第一次向浏览器发送数据时就告诉它不要缓存。
以下的代码试图使得浏览器不要缓存页面。
response.setHeader( " Pragma " , " no-cache " ); // HTTP 1.0 的回退功能失效
问题提出:以上代码工作在一般的页面上没有问题了,但是如果是一页表单提交的目标,那么浏览器回提示你是不是重新提交表单,这样数据仍然有些危险。
分析原因:浏览器缓存表单的数据导致的。
解决方法:在一些重要的场合,比如登陆时,在记录中多写一列为lastSubmit,记录最后访问修改的时间。在表单中放置一个隐藏文本框,取当前系统时间;在修改前核对系统记录的时间比它靠前,才继续;修改时更新该时间间,这样就可以避免重复的数据提交了。(时间可以通过:System.currentTimeMillis() 获得)
后记:
1) 由于很多页都要写缓存设置模块,可以通过<jsp:include/>标签在jsp中写,稍显混乱。
2) 在Struts中继承一个Action的基类把这段代码添加进去就好了,需要使用的地方继承自自定义类就可以了。(重载excute方法,在其中引用自己的抽象方法,例如excuteAction,在子类中需要实现excuteAction方法就可以了。)
局限性:在Opera中,设计浏览器的思路不是Cache失效它就不显示,所以。。。可能是不行的。
水平有限,请多包涵。
Enjoy!^_^