掌中招聘网 » 掌中论坛 » 全部 » struts1   动态form   session过期后,里面的数据居然还存在!请大家伙指点迷津
首页 上一页 下一页 尾页 
 本页主题: struts1   动态form   session过期后,里面的数据居然还存在!请大家伙指点迷津
 


泡妞而来

积分:60
发表主题:56




 发表于 2009-06-23 17:14 资料
楼主

正在维护一套系统,使用的是struts1,form为动态form,系统使用了过滤器,在web.xml中做了如下设置
<filter-name>loginFilter </filter-name>
  <filter-class>zhongliang.servlet.LoginFilter </filter-class>
    <init-param>
      <param-name>startsWith </param-name>
      <param-value>
        /Login.jsp,
        /loginAction.do
      </param-value>
    </init-param>
</filter>
在这个过滤器中进行处理时,如果访问的url中包含上述设置中的值,就不进行拦截,其他都要拦截,
当用户登录时(访问login.jsp),会调用loginAcion.do,在loginAction中有如下代码
public class LoginAction extends DispatchAction
{
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,      HttpServletResponse response)throws Exception
  {
        DynaActionForm myForm = (DynaActionForm)form;
        Map map = myForm.getMap();
        String loginName = map.get("loginName").toString().trim();
        String password = map.get("password").toString().trim(); 
        …………………………
LoginAction 处理完毕后 ,会导向一个home.jsp页面,该页面显示的url是:
http://localhost:7001/epare/loginAction.do

我的session过期时间设置为2分钟(测试时),当2分钟后,访问系统其他页面,会显示重新登录页面,但是当再次刷新home.jsp这个页面时居然没有出现提示重新登录页面,我知道,因为url中含有loginAction.do,所以过滤器没有拦截,会再次访问LoginAction.do,此时我的理解是session过期了,myForm 中不应该还有loginName和password值,结果却发现仍然有值!结果导致home.jsp能正常访问,其他页面也能了,这可不是我想要的结果啊,请高人帮忙指点迷津
回复1: 用struts令牌机制
登陆时在页面用savetoken方法,在接受请求页面用istokenvalid(request,false)接收判断
可以防止恶意登陆
回复2: 我这里不是恶意登录,我想解决的问题是,为什么session过期,动态form的里仍然保留以前登录的值~,如何解决这个问题。比如对于登录后显示的home.jsp我们是允许不断刷新的,不存在恶意登录的问题
回复3: 在你登录页面home.jsp设置一下
session.removeAttribute("username");
session.invalidate(); 
回复4: 遇到过类似的问题,不记得怎么解决了.
回复5: Ami121,如果这么设置了,当用户刷新这个页面时,即在session没过期得时候刷新,他会看到你没有登录的信息,这样他就会打电话到他们的信息中心,然后信息中心就会对我开始破口大骂的……

回复6: 重定向行不行,重定向后session应该不发生变化吧
回复7: 判断当过期的时候就自动弹重新登陆页面或者清空session
回复8: 没有看清楚你的页面跳转 只要session过期就要跳转到login.jsp
在login.jsp页面设置
session.removeAttribute("username");
session.invalidate();
回复9: 唉,重定向不行啊,因为在登录的action中做了大量的操作,都放到了request中去了,重定向后所有的值全丢失了,不行啊
回复10: Ami121,这个判断session过期,怎么判断啊?

回复11: 依据你的思路从home.jsp跳转到login.jsp
if(null==session.getAttribute("username")){
System.out.println("session取不到username的值,认为session已经过期了")
}else{
System.out.println("从home.jsp跳转到login.jsp不管session是否渠道sername的值,都认为session已经过期了")
session.removeAttribute("username");
session.invalidate();

}
具体怎么来实现 你自己本身可以规定



回复12: 哦, 怨我没说清楚,是这样的,是从login.jsp ,跳转到loginAction.do,然后在这个action中系统做了大量的操作,把很多数据放到了request和session中,然后跳转到了home.jsp,这时,虽然显示的是home.jsp,但是url其实显示的是loginAcrtion.do,系统的过滤器在判断访问的url时,如果url中有loginAction.do那么就放行,因为不放行的话,login.jsp提交的数据没法进行验证了,放行的标准就是,看看session过没过期,过期了就要求重新登录。现在的问题是,当session已经过期了,其他页面都访问不到了,但是刷新home.jsp它仍然能运行,因为url里是loginAction.do,我疑惑的是,这个loginAction.do中是要访问动态form的,session都过期了,这个动态form中的值,为什么还存在,即一开始登录提交的loginName和password还存在,所以还能正常跳转到home.jsp,google了好多都不行啊,郁闷

回复13: <action path="" name="你的form" scope="request"> </action>
scope修改成request看看

首页 上一页 下一页 尾页 
 各地招聘导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特
 各地兼职导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特