2010-10-04 4 views

Répondre

4

Il est relativement facile:

  • un minuteur JavaScript qui allume (durée de vie de la session - 5 min) minutes en utilisant setTimeout

  • La fonction setTimeout affiche une boîte de dialogue de confirmation, par ex. en utilisant jQuery UI Dialog

  • Si l'utilisateur souhaite prolonger la session, faites une requête Ajax à un fichier PHP. Si le fichier utilise des sessions, cela fonctionnera pour "toucher" la durée de vie de la session

  • Après avoir effectué la demande, définissez un autre setTimeout qui se déclenchera lorsque la session expirera à nouveau.

+0

n'a pas pensé à l'appel AJAX, très bien !!! –

+0

https://www.itworld.com/article/2832447/development/how-to-create-a-session-timeout-warning-for-your-web-application-using-jquery.html – Stefan

3

Je suggérerais une approche différente; juste actualiser la session pour l'utilisateur de toute façon. La plupart des indésirables session-décès se produisent en raison de

  • un long appel téléphonique
  • une visite inattendue
  • une réunion

et avec une boîte de dialogue de confirmation, la session serait déjà par mort au moment où votre l'utilisateur revient - ajoutant seulement la confusion.

Au lieu de cela:

var refresh_session = function() { 
    $.get("/refresh_session.php"); 
}, 

fifteen_minutes = 15 * 60 * 1000; 

setInterval(refresh_session, fifteen_minutes); 

-> utilisateurs heureux! :-)

+0

Ceci est une excellente option aussi, mais j'ai besoin d'user pour faire l'appel.C'est une session de 6 minutes, si aucune activité, je ai encore besoin d'eux pour être déconnecté –

+0

C'est juste :-) Mais vous devriez alors faire votre propre boîte de dialogue de confirmation, de sorte que vous pouvez le retirer à nouveau lorsque la session est connue pour être morte informer l'utilisateur de ce qui s'est passé. – Magnar

+0

Une partie du délai d'expiration de la session est la sécurité - forcer la session à rester en vie est correct dans certains cas, mais l'utilisateur devrait pouvoir opter pour cela. Dépend de la sensibilité du contenu – kmfk

0

Vous pouvez contourner le problème en ayant un script qui renvoie une image de 1 x 1 pixel sur un temporisateur JS. L'idée est que vous commencez avec un script PHP comme celui-ci (pas sûr si les appels d'en-tête en voici exactement droit ..):

header("ContentType: image/gif"); 
passthru("my-1x1.gif"); 

Maintenant, ont l'appel de fonction setInterval javascript ce script à un intervalle approprié (c'est-à-dire moins que l'intervalle GC de la session). Parce que l'image est servie depuis PHP, elle met à jour votre session, donc théoriquement les sessions de vos utilisateurs ne se termineront pas tant qu'elles resteront sur votre site.

+0

Nous gardons l'utilisateur connecté s'il est actif, cela n'arriverait que si l'utilisateur est inactif (comme ils sont au téléphone ou quelque chose), voudrait alerter/donner l'option d'étendre session avant qu'elle n'expire –

+0

OK, l'alerte apparaît après X minutes indiquant "Voulez-vous étendre votre session" et l'utilisateur est toujours au téléphone, et ne répond pas avant 10 minutes plus tard lorsque la session a déjà été GC 'd sur le serveur. Je ne pense pas que votre idée du choix de l'utilisateur soit bonne, vous êtes coincé dans une poule et un œuf. – Robin

Questions connexes