一种防止页面后退的实现方法(jsp)
来源:互联网 发布:电影网站源码带采集 编辑:程序博客网 时间:2024/05/01 08:07
当用户退出系统后,如果再重新打开登录后的页面,应该跳转到一个提示用户未登录的页面,这很容易做到,只要在jsp页面的头部加上验证session的代码既可以。但是由于浏览器有缓存,可以后退,如果退出系统后后退,则还是可以打开退出前的用户页面。如何禁止后退以后加载缓存的页面呢?
在网上搜到一种方法,就是设置jsp不可缓存,代码如下:
<% response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); %>
但是这种方法,只针对ie有效。
后来我想了一个方法:因为后退之后,页面也是按照html代码顺寻加载的,比如说页面页面中有一段代码
<script>
alert();
</script>
那面后退至该页面,也会弹出对话框。考虑到这一点,那么我想可以让页面判断是否用户已登录,如果未登录则用js跳转至提示页面。由于后退到缓存页面之后js代码还要运行一次,那么如果用户未登录,后退至该页面就会执行跳转的代码。
这时问题又来了,由于后退到达的页面是完全的html代码,不与服务器交换数据,因此如果直接嵌入jsp代码判断,那么后退到达页面中的jsp变量值实际上是上次与服务器交换数据后的缓存值,不会执行jsp代码。那么必须要求用html代码与服务器进行数据交换,也就是用js来与服务器通信,这就必须使用ajax了。
如果用dwr框架,则需要用dwr获取session,dwr获取session的方法如下:
HttpSession hs = WebContextFactory.get().getSession();
然后判断session,返回一个值。js根据这个值来判断是否需要跳转。
这时候还有一个问题,在页面中用dwr封装的函数,默认是异步操作的。当在页面中使用dwr的函数与服务器交换数据时,其他的html代码同时在进行加载。这时需要把dwr设置为同步执行,也就是调用的dwr函数后面的代码,需要等待函数进行完再进行加载。设置方法如下:
dwr.engine.setAsync(false);
该设置仅对当前页面有效,其他页面仍然是异步执行在写完调用的函数后面,再重新设置dwr为异步操作:
dwr.engine.setAsync(true);
这样函数执行完之后其他的dwr函数依然是异步执行。
- 一种防止页面后退的实现方法(jsp)
- 防止页面重复提交及后退方法
- 防止点击浏览器后退按钮 后退页面的js
- 防止退格键使页面后退的代码
- 防止用户注销后后退到原来页面的javascript与jsp解决方案
- js 防止页面后退
- 防止页面后退
- js防止页面后退
- js防止页面后退
- 浏览器防止页面后退
- jquery防止页面后退
- PHP程序实现支持页面后退的两种方法
- 搜集过防止用户点“后退”和刷新页面的一些方法
- jsp页面的前进刷新后退
- jsp页面的前进刷新后退
- jsp实现局部刷新的一种方法
- jsp页面后退问题
- jsp页面后退刷新
- 正则表达式
- android判断手机是否联网
- 免费Spire.Doc - -.NET开发者的福利
- ibatis mybatis
- generateDefaultLayoutParams()
- 一种防止页面后退的实现方法(jsp)
- error LNK2026: module unsafe for SAFESEH image.
- 多态的实现方式和应用
- javascript 对比两个数组获取不同元素
- Android 之 内存管理
- Openstack镜像和密码
- C# using用法
- busybox自带的tftp服务器
- excel------------打印问题