When doing web work, we often need to consider the issue of session expiration. When the session expires, the page will jump to the login interface. However, there is a problem. When the page expires, there are two ways for users to request the background: traditional method and asynchronous request. The traditional method is easier to solve. The request goes to the background, intercepts the expired operation, and jumps directly. However, the asynchronous request will not refresh the entire page, so the session expiration cannot be handled in the usual way and requires additional operations.
Specific idea: Determine whether it is an ajax request in the interceptor - if it is an ajax request, a message will be returned - the page will add a global ajax processing event to judge the message. If it is reported that the session has expired, then the location Go to the login page
First step, the interceptor determines whether it is an ajax request:
if(request.getHeader("x-requested-with")!=null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //是ajax请求,则返回个消息给前台 PrintWriter printWriter = response.getWriter(); printWriter.print("{sessionState:timeout}"); printWriter.flush(); printWriter.close(); }else{ //不是ajax请求,则直接跳转页面 }
Second step, set the global ajax processing event, Dealing with session expiration is similar to an interceptor or filter:
$.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", cache:false , complete:function(data,TS){ //对返回的数据data做判断, //session过期的话,就location到一个页面 } } });
This is an asynchronous processing mechanism based on jQuery. I have not written the complete code. I couldn’t bring out the code I wrote at the company last time. Some of the code in the article was found online and pasted in. It was already half an hour in the morning and I was too sleepy. I just recorded my thoughts.
PS: Ajax operation global monitoring, user session invalidation
jQuery(function ($) { // 备份jquery的ajax方法 var _ajax = $.ajax; // 重写ajax方法,先判断登录在执行success函数 $.ajax = function (opt) { var _success = opt && opt.success || function (a, b) { }; var _opt = $.extend(opt, { success: function (data, textStatus) { try { if (data.sessionstatus == false) { //用户失效进行操作 //return; } } catch (e) { } _success(data, textStatus); } }); _ajax(_opt); }; });
For more jQuery ajax global function to handle ajax jump problem after session expiration, please pay attention to PHP Chinese net!