解决weblogic下java应用请求session中的验证码为空的问题

xiaoxiao2021-02-28  88

个人认为原因在于:weblogic服务器下jsp页面加载比session创建速度快,当jsp页面加载验证码,写入session后,服务器又创建了新的session,导致下一次请求时浏览器cookie中jessionId访问不到储存验证码的session,所以第一次验证失败。第二次验证刷新验证码可以验证,因为服务器返回了新的jessionId并将新的验证码放入session中。

解决办法:初始化界面时,用jquery延时加载一个空请求,得到session后,加载验证码。

//js代码 $(function(){ $.ajaxSetup({ async: false }); //解决weblogic下第一次验证请求是session为null的问题 //使用jquery延迟进行服务器访问请求,获取会话信息后,加载验证码存入session中 function showPic(){ $.ajax({ type: 'POST', url:"*.sesseionAction", dataType:"text", success:function(data){ if(data =='success') { }else if(data!=null&&data!=""){ } } }); var _src = "Random.jsp?"+Math.random(); $("#randImage").attr("src",_src); } var test = setTimeout(function(){ showPic() },200); }); //Servlet响应 public class SessionServlet extends LoginServlet { /** * */ private static final long serialVersionUID = -5271370581043822209L; public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { HttpSession session = request.getSession(); String ran= (String) session.getAttribute("random"); if (ran == null) { response.setContentType("text/html; charset=utf-8"); response.getOutputStream().write("random".getBytes()); return; }else { response.setContentType("text/html; charset=utf-8"); response.getOutputStream().write("success".getBytes()); return; } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { this.doPost(request, response); } }

转载请注明原文地址: https://www.6miu.com/read-57179.html

最新回复(0)