需求:
网站包含两个主要的页面: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销毁。该如果解决这个问题呢?
网站包含两个主要的页面: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销毁。该如果解决这个问题呢?
解决方案 »
- 【紧急求救】关于页面显示表格的问题【非常感谢】
- 【急】java数据库表查询问题,大家多帮忙啊!谢谢
- 关于 网站页面程序的优化
- MessageVO 是一个什么样的类! 我怎么没有找到过这个的相关的解释呢!
- 2个关于JS的问题
- eclipse中编码格式的问题
- 表单提交后,如何关闭当前窗体,麻烦各位叔叔阿姨
- 请问大家,我想学JSP,请各位推荐几本JSP的书好吗?
- Servlet 2.3 and JavaServer Pages 1.2 中关于汉字处理的解决方案
- jsp+Servlet 做一个注册为什么数据插入不进数据库????
- String xm = (String)((NewStudent)form).getXm();为什么返回值为乱码?
- MySql 问题
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
没有问题的
并不使用filter
只在retrieve.jsp页面中设置Pragma,Cache-Control,Expires就好了
要通用就将下面代码写到javabean函数中,在需要的页面中调用就可以
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
这样会没有刷新功能(要的话要自己在页面加按钮),但有后退功能。
看不懂你的方法,是否可以结合我的方法实现全部功能呢?
{
**************;
document.location.href=urls;
}然后body中,onLoad="jump();"Game Over.
看来大家的方法都差不多了,就是在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)
{
}
int verify=((Integer)session.getAttribute("verify")).intValue();
if(verify==0)
{
//access deny
return;
}
else
{
session.setAttribute("verify",new Integer(0));
}可以把这段逻辑单独定一个jsp文件,需要的时候include。
lz的方法也有问题吧,既然redirect.jsp?nextPage=retrieve.jsp可以正常访问retrieve.jsp.
那么离开后又退到redirect.jsp?nextPage=retrieve.jsp不就能访问retrieve.jsp.
另外,如果可以解决的话,那也因该做成一个filter啊,因为你只是一些逻辑控制而已,这样可以避免对现有代码的修改,而且也要简单得多。
在unload事件中记录离开的时间我认为是最好的,改进一下,不用访问服务器,记录在cookie中就可以了,服务器再处理一下时间差,就能得到客户离开某页面的时间。