2010-10-19 3 views
1

Bonjour Je travaille sur l'obtention des données de la base de données en envoyant une valeur en utilisant la méthode getJSON de la bibliothèque JQuery, à une fonction PHP qui récupère les données de la base de données. Les données sont ensuite placées dans un tableau de paires name: value et sont codées en json et renvoyées/renvoyées en écho. Cela aiderait jQuery à remplir les éléments HTML requis avec les données de la base de données. Cela fonctionne bien pour moi.Redirection après l'expiration d'une session pour un appel ajax/json

Mon problème est d'avoir une redirection de connexion lorsque l'utilisateur n'est pas connecté ou lorsque la session a expiré. Je travaille avec CakePHP, donc j'utiliser leur composant Auth pour vérifier si l'utilisateur connecté

if(isset($this->Auth->User('id'))) 
{ 
//do reqd 
} 
else 
{ 
$this->Session->setFlash(__('Session Expired.', true)); 
$this->redirect(array('controller'=>'users','action' => 'login'),null,true); 
} 

Et lorsque la session est expirée, la page de connexion est réellement affichée en html dans la réponse JSON, plutôt que la la page entière est redirigée. Je sais qu'il s'agit d'une réponse JSON car je peux voir la page de connexion affichée dans la partie HTML de l'application console de Firebug. Je ne suis pas sûr s'il doit y avoir un autre type de redirection.

Répondre

1

Je ne sais pas comment faire cela en particulier dans le gâteau, mais l'approche générale est de chercher un en-tête HTTP qui est généralement envoyé par les navigateurs lors de l'utilisation XHR:

X-Requested-With: XMLHttpRequest 
+0

Bonjour Robin, pourriez-vous expliquer ce que cet en-tête est ?? ou quel est son nom? – macha

+0

Voici la fonction que j'utilise: 'function isAjaxRequest() {return (isset ($ _ SERVER ['HTTP_X_REQUESTED_WITH']) && ($ _SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); } ' – Robin

+0

Merci beaucoup! – macha

1

la seule façon que je trouve de gérer cette est que côté serveur, si la session a expiré, je n'ai pas lancé la requête AJAX mais renvoyé un objet JSON normalisé pour dire que la session a expiré et gérer la redirection côté client via AJAX.

Serveur:

// If $_SESSION expired 
echo json_encode(new array("session" => "expired")); 
exit(0); 

Client:

success: function(data) { if(data && data.session) { /* Session expired */ } } 

whitout faire comme ça, si dataType est réglé sur JSON, demande échouera et passez à la fonction de rappel d'erreur avec l'erreur "non valide JSON".

Questions connexes