2009-10-24 4 views
1

Mon application dispose d'un délai d'attente de session après 30 minutes. Si l'utilisateur a activé une fonction de "connexion permanente", le serveur lit le cookie "session permanente" et restaure la session lors d'une requête HTTP ultérieure.Reprise d'une session avec un appel AJAX

Cependant, si l'utilisateur ne recharge pas ou ne navigue pas vers une autre page après l'expiration de sa session, mais clique plutôt sur un bouton qui récupère des données via AJAX, la session n'est pas reprise; dans la DIV où les données devaient être chargées, une fenêtre de connexion apparaît à la place. Cela m'amène à supposer que les appels AJAX ne contiennent pas d'informations de cookie avec eux. Ai-je raison, ou ai-je manqué autre chose?

Mise à jour:

backend: (framework PHP) symfony 1.2, frontend: Prototype

Update2: il avait un bug dans l'application, pas un problème avec les cookies

+0

Hmm intéressant, j'ai toujours pensé que la demande effectuée par le navigateur porte l'information de cookie? –

+0

Cette hypothèse peut être vérifiée/réfutée en examinant le trafic Web réel. Si vous travaillez sur Windows, alors Fidder (http://www.fiddler2.com/fiddler2/) est un excellent outil; Sinon, le panneau Net de Firebug devrait faire le travail. – kdgregory

+0

Vrai, bon indice; J'ai examiné la demande dans Firebug et l'information sur les cookies est là. –

Répondre

2

Cela ressemble à vous restaurez la session, mais ne pas fournir un nouveau cookie d'authentification. Vous voudrez peut-être essayer une technique sur laquelle j'ai écrit sur mon blog: avoir un temporisateur côté client qui invitera l'utilisateur juste avant l'expiration de la session et, lorsqu'il cliquera sur OK pour le renouveler, fera une demande qui le fera. sert à maintenir en vie le cookie de session et d'authentification. Vous pouvez trouver plus d'informations au http://farm-fresh-code.blogspt.com. L'article est intitulé Client-side Session Termination.

+0

Excellent tutoriel! Je préfère ne pas avoir l'avis "Hey, votre session est sur le point d'expirer" pour apparaître; Je préfère quand la session reprend de manière transparente. –

+0

Il suffit d'aller de l'avant et de faire la demande, alors, au lieu d'ouvrir le dialogue. Pour des raisons de sécurité, j'ai tendance à vouloir que la session expire si l'utilisateur n'est pas assis devant son ordinateur. J'utilise donc la fenêtre contextuelle et je la déconnecte silencieusement si elle ne répond pas dans un délai raisonnable. – tvanfosson

2

Un appel XMLHttpRequest devrait porter des informations cookie comme d'habitude. Vous pourriez avoir un bug. Assurez-vous que l'appel provient de la même origine de domaine?

Peut-être que vos cookies expirent également? Plus d'informations pourraient aider .. :)

+0

Je soupçonne un bug, oui. –

+0

savez-vous comment faire face à l'origine du domaine externe? –