您的位置:程序门 -> java -> web 开发



如何限制ie浏览器back键功能


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何限制ie浏览器back键功能[已结贴,结贴人:majorzq]
发表于:2007-06-19 14:55:55 楼主
需求:
        网站包含两个主要的页面:login.jsp和retrieve.jsp。用户在login.jsp输入用户名和密码,retrieve.jsp页面根据用户名密码来显示内容。

        要求用户访问retrieve.jsp后,如果跳转到其他非本站点页面,比如新浪首页后,按ie浏览器上的back按钮,retrieve.jsp要报错,不可以显示刚才的内容。

        服务器端我用的是tomcat,下面是测试的日志,我打印出了request的相关参数:
==============   login   page   =============
sessionid=3d73200bd37c20b6e660842dd78bbdb5
previous   url:null

==============   retrieve   page   ===========
sessionid=3d73200bd37c20b6e660842dd78bbdb5
attributes:
parameters:
headers:
accept:image/gif,   image/x-xbitmap,   image/jpeg,   image/pjpeg,   application/x-shockwave-flash,   application/vnd.ms-excel,   application/vnd.ms-powerpoint,   application/msword,   */*
referer:http://10.10.8.254:8080/mmvd/kevin/
accept-language:zh-cn
accept-encoding:gzip,   deflate
user-agent:mozilla/4.0   (compatible;   msie   6.0;   windows   nt   5.1;   sv1)
host:10.10.8.254:8080
connection:keep-alive
cache-control:no-cache
cookie:jsessionid=3d73200bd37c20b6e660842dd78bbdb5

==============   retrieve   page   ==================
sessionid=3d73200bd37c20b6e660842dd78bbdb5
attributes:
parameters:
headers:
accept:*/*
referer:http://10.10.8.254:8080/mmvd/kevin/
accept-language:zh-cn
accept-encoding:gzip,   deflate
user-agent:mozilla/4.0   (compatible;   msie   6.0;   windows   nt   5.1;   sv1)
host:10.10.8.254:8080
connection:keep-alive
cookie:jsessionid=3d73200bd37c20b6e660842dd78bbdb5


稍微解释一下:

1.login.jsp输入了用户名密码

2.第一次出现retrieve   page是用户正常登陆时的日志

3.第二次是跳转到www.sina.com.cn后,用back键回到retrieve.jsp时的日志。

问题:
        可以看到,通过两种方式访问,session   id,   referer等主要参数都是一样的。而且在这种条件下,没有办法将session销毁。该如果解决这个问题呢?
发表于:2007-06-19 14:59:131楼 得分:10
用struts,提交给action之后   后退就会提示了
发表于:2007-06-19 15:06:062楼 得分:0
因为是在已有的网站上做改进,所以改动不能太大了。有基本方法么?或者说struts是如何做到这点的呢?
发表于:2007-06-19 15:10:403楼 得分:0
那就不知道了,之其然不知其所以然哦!
发表于:2007-06-19 16:48:244楼 得分:0
any   way,   thanks.
发表于:2007-06-19 22:24:525楼 得分:0
强制禁止ie缓存页面
发表于:2007-06-19 22:29:156楼 得分:10
禁止ie缓存,后退会显示页面失效
response.setheader( "pragma ", "no-cache ");
response.setheader( "cache-control ", "no-cache ");
response.setdateheader( "expires ",   0);
发表于:2007-06-20 10:33:347楼 得分:0
谢谢各位的回复。

可能有一点我没说清楚,对于站点内部的各个页面,是要求可以自由使用后退键跳转的。如果加了清除缓存和立即过期,内部页面之间也不能后退了。

另外,即便后退时显示页面过期,如果点刷新,还是可以重新显示retrieve.jsp的,而且用户名和密码和之前一次登陆时是一样的。还是不能做到完全避免用户信息泄露。

盼指点。。。
发表于:2007-06-20 18:11:148楼 得分:0
沉了,自己顶下
发表于:2007-06-21 09:43:219楼 得分:0
没有人回呀。。。。
发表于:2007-06-21 09:52:0310楼 得分:0
up
发表于:2007-06-21 18:34:5811楼 得分:10
能否这样呢,在unload事件中连接服务器,服务起记录用户要离开页面了,如果下一次连接时超过某个时间了(如3秒),则说明用户用户访问过别的网站了。
发表于:2007-06-21 21:02:3912楼 得分:0

没有问题的
并不使用filter
只在retrieve.jsp页面中设置pragma,cache-control,expires就好了
要通用就将下面代码写到javabean函数中,在需要的页面中调用就可以
response.setheader( "pragma ",   "no-cache ");
response.setheader( "cache-control ",   "no-cache ");
response.setdateheader( "expires ",   0);
发表于:2007-06-22 16:25:0613楼 得分:0
找到一个方法,在session中加一个控制变量。每两个页面之间加入一个不可显示的校验页面。不过现在还是有缺陷,站点内还是不能通过back回退,只能自己在页面上做一个back按钮。因为我原先没有做过jsp,连html都没有怎么接触过,所以办法比较土。不过万幸老板说ok。

如果谁有更好的办法,还可以跟大家一起讨论。三天后结贴,感谢各位的帮助,分数给大家平分好了。
发表于:2007-06-22 17:20:3514楼 得分:10
写一个check.jsp页面,然后自己网站的所有页面去include它,在check.jsp中校验session中的控制变量,这样自己网站就能用back了
发表于:2007-06-23 17:55:0715楼 得分:0
因为后退于刷新很相似,如果你可以不要刷新功能的话,可以在session中保存当前访问的页面,如果反问的页面相同则报错,
这样会没有刷新功能(要的话要自己在页面加按钮),但有后退功能。
看不懂你的方法,是否可以结合我的方法实现全部功能呢?
发表于:2007-06-25 17:38:2616楼 得分:0
up   !!!!
发表于:2007-06-25 21:03:2317楼 得分:10
这么easy的问题,这么多同学没有答道点子上。easy的问题,就要用easy的方法解决嘛,如下:

新建一个autojump.jsp文件。看名字就知道了,自动跳转啊。。。

function   jump()
{
    **************;
    document.location.href=urls;  
}

然后body中,onload= "jump(); "

game   over.
发表于:2007-06-26 09:42:1418楼 得分:0
這位兄弟﹐既然雨問題簡單﹐就解釋的詳細一點唄﹐也讓大家伙都學習一下嘛
发表于:2007-06-27 16:06:5819楼 得分:0
这么多人哈。
看来大家的方法都差不多了,就是在session中加入控制变量,然后在每两个页面中间加入一个不可显示的跳转控制页面。控制的逻辑我想有很多了,只要能实现就好。我就把我现在实现的方法说一下,当作总结了:
1.在session中加入一个叫做verify的变量,这个变量可以取0或者1两个值。在login.jsp(网站欢迎页面)中初始化这个变量为0。

2.   编写一个不可显示页面,比如叫做redirect.jsp。这个页面中将verify变量设为1。每两个页面间跳转都要通过这个页面,比如说对于button的click事件:
    onclick= "parent.location=redirect.jsp?nextpage=retrieve.jsp "

3.在每个受控制的页面的最开始,加入一段控制逻辑:
      if(verify==0)
      {
}
发表于:2007-06-27 16:12:3720楼 得分:0
3.在每个受控制的页面的最开始,加入一段控制逻辑:
          int   verify=((integer)session.getattribute( "verify ")).intvalue();    
          if(verify==0)    
          {
                  //access   deny
                  return;    
          }
          else
          {
                  session.setattribute( "verify ",new   integer(0));
          }

可以把这段逻辑单独定一个jsp文件,需要的时候include。

发表于:2007-06-27 16:16:4821楼 得分:0
response.setdateheader( "expires ",   0);
发表于:2007-06-27 16:23:3522楼 得分:0
mclinting的方法似乎有些问题。当用户从本网站跳转到其他网站,然后点击一下后退的时候可以正常的避免页面显示,因为session中的url记录的就是要回退到的url。但如果后退到更早的页面,比如通过back按钮旁边的下拉菜单中直接选择,就无法控制了。

发表于:2007-06-28 10:53:3423楼 得分:0
的确是有问题.window.location.replace()避免后退到前面的网页,就是限制太多了,刷新、后退都不能用了。
lz的方法也有问题吧,既然redirect.jsp?nextpage=retrieve.jsp可以正常访问retrieve.jsp.
那么离开后又退到redirect.jsp?nextpage=retrieve.jsp不就能访问retrieve.jsp.
另外,如果可以解决的话,那也因该做成一个filter啊,因为你只是一些逻辑控制而已,这样可以避免对现有代码的修改,而且也要简单得多。
发表于:2007-06-28 11:47:4124楼 得分:0
应为两次访问retrieve   page页面(或者lz改进的redirect.jsp?nextpage=retrieve.jsp)的信息是相同的,我觉得不记录访问状态是没法实现的。
在unload事件中记录离开的时间我认为是最好的,改进一下,不用访问服务器,记录在cookie中就可以了,服务器再处理一下时间差,就能得到客户离开某页面的时间。


快速检索

最新资讯
热门点击