问题描述
今天用ajax做了个用户登陆,事先随机生成的4位验证码存入session里了,但是ajax提交到action时获取不到session里的验证码,action里打印出的验证码是null,但是直接用表单提交登陆的时候能获取session里的验证码,劳烦高手帮助,不甚感激!
解决方案
解决方案二:
在JBOSS中运行试试
解决方案三:
之前学习的时候好像也遇到过,刚才随便写了下,好像没得这个问题,把你代码发上来看看
解决方案四:
代码在哪里呢?
解决方案五:
这不科学代码拿来看看
解决方案六:
session不同步导致的,你是异步登录操作,那么获取session也应该异步。。
解决方案七:
引用5楼ch656409110的回复:
session不同步导致的,你是异步登录操作,那么获取session也应该异步。。
具体应该怎么做
解决方案八:
引用4楼sui2121的回复:
这不科学代码拿来看看
呃,上周五的时候又改成Extjs做了,还是取不到session里的验证码的值。EXt的验证码代码段:newExt.Panel({baseCls:"x-plain",layout:'column',width:290,height:38,items:[{layout:"form",columnWidth:.7,labelWidth:97,items:[{xtype:"textfield",width:90,fieldLabel:"Codingss",name:"image",allowBlank:true,}],},{columnWidth:.3,html:"<ahref='javascript:void(0)'><imgborder='0'src='pages/image.jsp'id='image'onClick='to('pages/login.jsp');'></a>",}],})],buttons:[{text:"Submit",type:"submit",handler:function(){if(form1.form.isValid()){form1.form.submit({waitMsg:"Loging......",url:"login.action",method:"post",success:function(form,action){Ext.Msg.alert("Tips","LoginSuccess!");document.location="index.jsp";},failure:function(form,action){Ext.Msg.alert("Tips",action.result.message);}});}}}
验证码存入session://将认证码存入SESSIONsession.setAttribute("rand",sRand);System.out.println("新的验证码"+sRand);//图象生效g.dispose();OutputStreamoutput=response.getOutputStream();//输出图象到页面ImageIO.write(image,"JPEG",response.getOutputStream());output.flush();out.clear();out=pageContext.pushBody();
action代码://Stringrand=(String)ServletActionContext.getRequest().getSession().getAttribute("rand");Stringrand=(String)ActionContext.getContext().getSession().get("rand");
解决方案九:
引用3楼zy353003874的回复:
代码在哪里呢?
呃,上周五的时候又改成Extjs做了,还是取不到session里的验证码的值。EXt的验证码代码段:newExt.Panel({baseCls:"x-plain",layout:'column',width:290,height:38,items:[{layout:"form",columnWidth:.7,labelWidth:97,items:[{xtype:"textfield",width:90,fieldLabel:"Codingss",name:"image",allowBlank:true,}],},{columnWidth:.3,html:"<ahref='javascript:void(0)'><imgborder='0'src='pages/image.jsp'id='image'onClick='to('pages/login.jsp');'></a>",}],})],buttons:[{text:"Submit",type:"submit",handler:function(){if(form1.form.isValid()){form1.form.submit({waitMsg:"Loging......",url:"login.action",method:"post",success:function(form,action){Ext.Msg.alert("Tips","LoginSuccess!");document.location="index.jsp";},failure:function(form,action){Ext.Msg.alert("Tips",action.result.message);}});}}}
验证码存入session://将认证码存入SESSIONsession.setAttribute("rand",sRand);System.out.println("新的验证码"+sRand);//图象生效g.dispose();OutputStreamoutput=response.getOutputStream();//输出图象到页面ImageIO.write(image,"JPEG",response.getOutputStream());output.flush();out.clear();out=pageContext.pushBody();
action代码://Stringrand=(String)ServletActionContext.getRequest().getSession().getAttribute("rand");Stringrand=(String)ActionContext.getContext().getSession().get("rand");
解决方案十:
怎么放的,还怎么取,用request.getSession().getAttribute("rand")
解决方案十一:
session.getAttribute("rand")呢?
解决方案十二:
引用9楼fangmingshijie的回复:
怎么放的,还怎么取,用request.getSession().getAttribute("rand")
我那段注释掉的代码//String rand=(String)ServletActionContext.getRequest().getSession().getAttribute("rand");就是之前用request取的,不过没有取到
解决方案十三:
session.setAttribute("rand",sRand);System.out.println("新的验证码"+sRand);这两句放到生成验证码最后面。
解决方案十四:
引用12楼fangmingshijie的回复:
session.setAttribute("rand",sRand);System.out.println("新的验证码"+sRand);这两句放到生成验证码最后面。
把那两句放到out = pageContext.pushBody();后面吗
解决方案十五:
引用12楼fangmingshijie的回复:
session.setAttribute("rand",sRand);System.out.println("新的验证码"+sRand);这两句放到生成验证码最后面。
不行,取到的还是null
解决方案:
这个和同步,异步没有关系,建议你装一个fiddler监控一下http的请求,这样分析起来会容易很多,另外补一下http协议相关的知识
解决方案:
断点调试一下,看看是否真的生成了!
解决方案:
你的ajax是不是跨域了,跨域请求的时候,服务器session会发生改变,所以session里面原来存储的验证码的值不存在了,也就为null了
解决方案:
嗯,你的ajax是不是跨域访问