一种防止页面后退的实现方法(jsp)

20 篇文章 0 订阅

当用户退出系统后,如果再重新打开登录后的页面,应该跳转到一个提示用户未登录的页面,这很容易做到,只要在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函数依然是异步执行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值