J'utilise jQuery et le plugin JQuery.Form pour soumettre mon formulaire (également à l'aide d'ASP.NET MVC). p>
Problème est que l'utilisateur est dans une section du site qui utilise l'authentification des formulaires et si leur authentification expire pendant leur temps sur la page au lieu de récupérer un statut de 302, ce qui serait la redirection à la page de connexion, i Encore 200? P>
en Firebug Je vois le 302 trouvé, puis ma page de connexion est servie ensuite en tant que 200 qui est le code d'état envoyé à mon appel Ajax. Comment puis-je détecter qu'ils ont été déconnectés si je ne vois jamais le 302 renvoyé au plugin de formulaire JQuery? P>
5 Réponses :
Essayez avec cache: false Option de cache dans JQuery Ajax :
protected void Page_Load(object sender, System.EventArgs e) { Response.Cache.SetCacheability(HttpCacheability.NoCache); ... }
même résultat - je vois à la fois les 302, puis les 200 en Firebug Butt, le JS voit 200 :(
peut voir l'URL complète de l'appel d'Ajax?
Un problème similaire a été rencontré auparavant. Est le solution donnée dans cette question utile ? p>
C'est la solution que j'ai utilisée dans le passé:
côté serveur: p>
Lorsque je vérifie pour voir si une session est toujours valide, je garde aussi un œil sur le "X-demandé-with" en-tête, qui devrait être "XMLHTTTPRQUEST" si vous utilisez JQuery (Remarque: c'est-à-dire tend à renvoyer le nom d'en-tête en minuscule, alors surveillez-la aussi). Si la session a effectivement expiré et que l'en-tête est présent, au lieu d'utiliser une redirection HTTP, je réponds avec un simple objet JSON comme celui-ci: P>
$(window).ajaxComplete(function(ev, xmlhr, options){ try { var json = $.parseJSON(xmlhr.responseText); } catch(e) { console.log('Session OK'); return; } if ($.isPlainObject(json) && json.SESSION == 'EXPIRED') { console.log('Session Expired'); //inform the user and window.location them somewhere else return; } console.log('Session OK'); });
Je suis sûr que vous n'obtiendrez jamais le 302 dans le statut terminé de l'objet XHR. Si une redirection se produit, la connexion est toujours en train de voir la réponse de la page de connexion (qui devrait être 200, s'il existe). p>
Cependant, pourquoi avez-vous besoin de voir le 302? Sûrement si vous obtenez une redirection pour login.php, alors obtenez simplement l'URL (ou l'analyse du contenu) de la réponse renvoyée vous dit qu'ils ont été déconnectés? P>
Une alternative, uniquement si vous souhaitez savoir dès que la session a expiré (avant de faire une action), consiste à interroger le serveur en utilisant SettimeOut ou similaire pour obtenir des informations sur l'état d'authentification. P>
bonne chance. P>
J'aime vraiment cette solution. En modifiant la réponse 302 sur les demandes Ajax à un 401, il vous permet de configurer votre AJAX du côté du client pour surveiller toute demande AJAX à la recherche d'un 401 et s'il en trouve un à rediriger vers la page de connexion. Très simple et efficace.
global.asax: p> code côté client: p>
Avez-vous essayé de vérifier le cookie d'autorisation? On dirait qu'il serait plus facile de vérifier le cookie à détecter si l'utilisateur est connecté.