Maison  >  Article  >  interface Web  >  Comment résoudre le problème de l'échec de la session de requête Ajax

Comment résoudre le problème de l'échec de la session de requête Ajax

亚连
亚连original
2018-05-24 15:03:492452parcourir

HTML + Servlet + Filtre + jQuery De manière générale, nos projets ont des filtres de connexion, et les requêtes générales suffisent. Mais AJAX est une exception, la solution consiste donc à définir la réponse à l'invalidation de session.

De manière générale, nos projets disposent de filtres de connexion, et les demandes générales suffisent. Mais AJAX est une exception, la solution consiste donc à définir la réponse à l'invalidation de session.

Les paramètres sont divisés en deux parties : filtre et page JS Voyons d'abord la modification du filtre :

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

Le code est simple, donc il n'y en aura pas trop. beaucoup de commentaires. Regardons maintenant la partie JS. Bien sûr, il est basé sur 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");
    }
  }
});

La page charge ce code js puis commence à appeler ajax. Si vous n'êtes pas connecté ou si la session n'est pas valide, vous pouvez voir la page accéder à la page de connexion.

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles connexes :

Chargement asynchrone Ajax d'exemples d'images

Le framework Django utilise ajax pour implémenter la fonction d'importation de données par lots

Explication détaillée de l'objet AJAX XMLHttpRequest

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn