Heim  >  Artikel  >  Web-Frontend  >  So lösen Sie das Problem des Ajax-Anfragesitzungsfehlers

So lösen Sie das Problem des Ajax-Anfragesitzungsfehlers

亚连
亚连Original
2018-05-24 15:03:492451Durchsuche

HTML + Servlet + Filter + jQuery Im Allgemeinen verfügen unsere Projekte über Anmeldefilter und allgemeine Anfragen reichen aus. Da AJAX jedoch eine Ausnahme darstellt, besteht die Lösung darin, die Reaktion auf die Sitzungsungültigmachung festzulegen.

Generell verfügen unsere Projekte über Login-Filter und allgemeine Anfragen reichen aus. Da AJAX jedoch eine Ausnahme darstellt, besteht die Lösung darin, die Reaktion auf die Sitzungsungültigmachung festzulegen.

Die Einstellungen sind in zwei Teile unterteilt: Filter und Seiten-JS. Schauen wir uns zunächst die Änderung des Filters an:

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 ;
  }
}

Der Code ist einfach, daher wird es nicht zu viele Kommentare geben Schauen wir uns nun den JS-Teil des Codes an. Natürlich basiert es auf 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");
    }
  }
});

Die Seite lädt diesen JS-Code und beginnt dann mit dem Aufruf von Ajax. Wenn Sie nicht angemeldet sind oder die Sitzung ungültig ist, können Sie sehen, dass die Seite zur Anmeldeseite springt.

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

Ajax-Asynchrones Laden von Bildbeispielen

Django-Framework verwendet Ajax, um die Batch-Importdatenfunktion zu implementieren

Detaillierte Erläuterung des AJAX XMLHttpRequest-Objekts

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem des Ajax-Anfragesitzungsfehlers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn