IE中ajax+jsp登录界面,由于缓存导致jsp过滤器与ajax请求被拦截的问题和解决

4 篇文章 0 订阅
3 篇文章 0 订阅

 学习javaweb过程中一个灰常奇怪的问题

jsp+ajax做了个登陆界面,但是一个用户只能登陆一次,在登录就跳转不过去了!
后台servlet:

	HttpSession httpSession = request.getSession();
        	String usernumString = request.getParameter("usernum");// 获取输入的用户名
        	String passwordString = request.getParameter("password");// 获取输入的密码
       	response.setContentType("text/html;charset=utf-8");
      	PrintWriter printWriter = response.getWriter();
        	System.out.println("-----");//第一次用这个用户可以登录并正常显示和跳转,第二次和以后在用这个账户就根本不出现打印语句了
        	if (!LoginCheck.check(usernumString, passwordString)) {// 检查用户名密码,匹配数据库
            	printWriter.println("密码错误");
        	} else {
            	printWriter.println("");
            	httpSession.setAttribute("usernum", usernumString);
        	}


 

更奇怪的是,虽然以后登录sysout打印没出来,但是if里面的判断结果却返回给了页面!

javascript:

	function check() {
        	var jqueryObj1=$("#usernum");
        	var usernum=jqueryObj1.val();
        	var jqueryObj2=$("#password");
        	var password=jqueryObj2.val();
        	alert(usernum+"+"+password);
        	$.get("${pageContext.request.contextPath }/login.do?usernum=" + usernum
                	+ "&password=" + password, null, checkback);
    	}
    	function checkback(data) {
        	alert(data.length);
        	alert(data);
        	if (data.length==6) {
            	var resultObj = $("#result2");
            	resultObj.html(data);
        	} else {
            	window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
        	}
    	}


登陆后的注销servlet:

HttpSession session = request.getSession();//获取session
        session.removeAttribute("usernum");//清除字段
        request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
                response);


还有两个过滤器:
第一个是为了防止未登录的用户进入,过滤的除了login之外的页面:

HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpSession session = httpServletRequest.getSession();//获取session
        if(session.getAttribute("usernum")  == null)//判断session是否空
        {    
            request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
            return;
        }

 

第二个是为了防止登录用户再进入登陆页面,只过滤login页面:
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpSession session = httpServletRequest.getSession();// 取得session
        if (session.getAttribute("usernum") != null)// 判断session是否为空
        {
            request.getRequestDispatcher("/view/index.jsp").forward(request,
                    response);// 非空,则已经登录,转入主页
            return;
        }
把两个过滤器删掉就没事了。
但是还是那个问题,firefox下不删也没问题。是不是两个浏览器关于session清除和set上有什么差异?
 
我用了一个折中的方法:
js中跳转改为跳到一个中间的servlet:
 
window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;
然后在这个servlet中setsession。这样就可以解决登录的问题,但是那个打印语句依然没有出现。
 
终于在大家的提醒下,是缓存问题没有解决。登陆的url两次一样的话Ajax不会访问服务器。
 
于是将js方法改成如下,给url加上时间戳:
    function check() {
        var jqueryObj1=$("#usernum");
        var usernum=jqueryObj1.val();
        var jqueryObj2=$("#password");
        var password=jqueryObj2.val();
        $.get("${pageContext.request.contextPath }/login.do?time="+new Date().getTime()+"&usernum=" + usernum
                + "&password=" + password, null, checkback);
    }

 

于是原因找到,问题得到解决!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值