Ajax请求session失效该如何解决
程序员文章站
2023-10-31 15:17:28
一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是ajax却是例外的,所以解决方法是设置响应为session失效。
一共分为过滤器和页面js两个部分的设置,先看过滤...
一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是ajax却是例外的,所以解决方法是设置响应为session失效。
一共分为过滤器和页面js两个部分的设置,先看过滤器的修改:
import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servlet.servletrequest; import javax.servlet.servletresponse; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; /** * 登录过滤器 * 拥有session是否失效和用户是否登录2个条件判断 * 如果是ajax请求则设置session超时 * @author merlin.ma * */ public class loginfilter implements filter{ private string redirecturl = "/login.html"; private string sessionkey = "username"; @override public void destroy() { } @override public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception { httpservletrequest req = (httpservletrequest) request; httpservletresponse rep = (httpservletresponse) response; httpsession session = req.getsession(); if( session == null || session.getattribute(sessionkey) == null){ //如果判断是 ajax 请求,直接设置为session超时 if( req.getheader("x-requested-with") != null && req.getheader("x-requested-with").equals("xmlhttprequest") ) { rep.setheader("sessionstatus", "timeout"); } else { rep.sendredirect( req.getcontextpath() + redirecturl); } }else { chain.dofilter(request, response); } } @override public void init(filterconfig filterconfig) throws servletexception { string url = filterconfig.getinitparameter("redirecturl"); string key = filterconfig.getinitparameter("sessionkey"); redirecturl = url == null? redirecturl:url; sessionkey = key == null ? sessionkey : key ; } }
代码简单,就不过多进行注释了,现在看js部分的代码。当然是基于jquery的~~
//全局的ajax访问,处理ajax清求时sesion超时 $.ajaxsetup({ contenttype : "application/x-www-form-urlencoded;charset=utf-8", complete : function(xmlhttprequest, textstatus) { var sessionstatus = xmlhttprequest.getresponseheader("sessionstatus"); // 通过xmlhttprequest取得响应头,sessionstatus, if (sessionstatus == "timeout") { // 如果超时就处理 ,指定要跳转的页面 window.location.replace("login.html"); } } });
页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。
上一篇: js ajax加载时的进度条代码
下一篇: 什么是微波通信
推荐阅读
-
JQuery ajax 返回json时出现中文乱码该如何解决
-
React如何解决fetch跨域请求时session失效问题
-
如何解决Ajax访问不断变化的session的值不一致以及HTTP协议中的GET、POST的区别
-
Ajax请求session失效该如何解决
-
使用wordpress的$wpdb类读mysql数据库做ajax时出现的问题该如何解决
-
ajax请求Session失效问题
-
如何解决ajax在google chrome浏览器上失效
-
完美解决ajax访问遇到Session失效的问题
-
ajax 操作全局监测,用户session失效的解决方法
-
express如何解决ajax跨域访问session失效问题详解