Maison  >  Article  >  interface Web  >  Solution au problème de l'échec de la session utilisateur lors de l'utilisation d'Ajax

Solution au problème de l'échec de la session utilisateur lors de l'utilisation d'Ajax

韦小宝
韦小宝original
2018-01-01 18:36:571193parcourir

Cet article présente principalement en détail la solution au problème de l'échec de la session utilisateur lors de l'utilisation d'Ajax. Il a certaines références et valeurs pour l'apprentissage d'Ajax. Les amis qui sont intéressés par Ajax peuvent s'y référer

Lors de l'utilisation. l'intercepteur spingMVC pour gérer le problème de l'échec de la session utilisateur, lorsque la session utilisateur échoue, une chaîne de chaînes javascript sera renvoyée pour forcer le navigateur de l'utilisateur à accéder à la page de connexion. Cependant, lorsque Ajax est utilisé pour demander des données, seule une chaîne recevra une réponse après l'échec de la vérification et JavaScript ne sera pas exécuté. En effet, la requête Ajax est initiée par l'objet XMLHTTPRequest plutôt que par le navigateur. Après l'échec de la vérification, le serveur. renvoie Les informations seront reçues par l'objet XMLHTTPRequest et enregistrées dans l'objet js.

Afin de faire face à cette situation, les requêtes Http peuvent d'abord être jugées en arrière-plan, et les requêtes Ajax peuvent être traitées séparément des requêtes http ordinaires.
En observant les informations d'en-tête de requête envoyées par Ajax, vous pouvez constater que les informations d'en-tête de la requête Ajax contiendront X-Requested-With:XMLHttpRequest. Grâce à cela, vous pouvez déterminer s'il s'agit d'une requête Ajax.

String requestType = request.getHeader("X-Requested-With");
if(requestType != null && "XMLHttpRequest".equalsIgnoreCase(requestType.trim())) {
  //如果是ajax请求
  response.setHeader("sessionStatus", "timeout");
  response.sendError(601, "session timeout.");
  return false;
}

code javascript, vous pouvez définir les options globales par défaut pour les requêtes Ajax, une fois pour toutes

//设置Ajax请求的全局默认options
jQuery.ajaxSetup({
  type:'post',
  complete:function(xhr, ts){ //XMLHttpRequest, textStatus
    var sessionStatus = xhr.getResponseHeader('sessionstatus');
    if(sessionStatus == 'timeout') {
      alert('页面过期,请重新登录!');
      window.top.location.href = 'Login.htm';
    }
  }
});

DataTables est également utilisé dans le projet pour créer des tables de données. Il s'avère que la méthode de configuration javascript ci-dessus ne peut pas prendre effet dans les tables de données. Pour plus d'informations sur les erreurs, voir : http://datatables.net. /tn/7 Vous devez configurer l'attribut d'erreur d'ajax. Can

$('#example').dataTable( {
 "ajax": {
  "url": "findRoles.htm",
  "type": "POST",
  "error": function(xhr, ts, et) { //XMLHttpRequest, textStatus, errorThrown
    var sessionStatus = xhr.getResponseHeader('sessionstatus');
    if(sessionStatus == 'timeout') {
      alert('页面过期,请重新登录!');
      window.top.location.href = 'Login.htm';
    }
  }
 }
});

Ce qui précède est l'intégralité du contenu de cet article. utile à l'apprentissage de chacun, et j'espère également que tout le monde soutiendra le site Web PHP chinois.

Recommandations associées :

Une brève analyse du problème des données JSON transmises à partir du succès en arrière-plan Ajax

Ajax transmet les données au format JSON à l'arrière-plan. Analyse des causes et solution de l'erreur 415

Formulaire de soumission de formulaire Ajax et exemple de code de téléchargement de fichier

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