2009-12-03 5 views
0

Je voudrais stocker le login, la déconnexion et la durée dans la base de données.Connexion, déconnexion et durée en php et mysql?

  • Le temps de connexion est créé lorsque l'utilisateur est authentifié (connecté avec succès)
  • Le temps de déconnexion est créé lorsque l'utilisateur clique sur le bouton de déconnexion
  • La durée est de déconnexion - temps de connexion. (se déconnecter moins login)

Mais le problème est, que si l'utilisateur n'a pas cliqué sur le bouton de déconnexion. Voici les situations:

  • perte Internet
  • Fermez le navigateur/onglet. (Je dois cela doit utiliser javascript, mais je donnu comment le faire, une idée?)

EDIT:

J'ai oublié d'ajouter quelque chose à la question, le programme est un programme flash complet, il est pas de navigation vers une autre page. Seulement 1 page

+0

Vous avez seulement besoin de stocker les dates et heures de début et de fin - vous pouvez calculer la durée au besoin, plutôt que de la stocker. –

+0

Que diriez-vous des choses de déconnexion. J'ai oublié d'ajouter quelque chose à la question, le programme est un programme flash complet, il n'y a pas de navigation vers une autre page. Une seule page – mysqllearner

+0

Les paramètres de session par défaut sur les serveurs Web sont de 20 minutes. S'il n'y a pas de déconnexion, 20 après la connexion est à peu près tout ce que vous pouvez supposer. Il n'y a pas de moyen fiable de savoir quand une connexion s'est éteinte, et ça ne vaut pas la peine d'être appelé par AJAX pour écrire une valeur temporaire de temps en temps. –

Répondre

0

Vous ne pouvez pas compter sur la réception d'un événement pour l'utilisateur de vous déconnecter, s'ils ferment simplement leur navigateur, ou disparaissent de l'Internet.

Dans ce cas, vous devez avoir un délai d'attente de la session de quelque sorte, et enregistrer l'application lorsque votre déconnexion se rend compte de leur session est trop vieux.

Si cela est une exigence réelle, alors je dirais que vous avez besoin d'un suivi de travail « cron » les sessions de délai d'attente. Quand une session a expiré, si elle était connectée, elle enregistre alors un événement de "déconnexion" pour cet utilisateur.

Notez que vous ne pouvez pas utiliser (par exemple) l'événement Session_End d'ASPNET, car il ne sera pas appelé de manière fiable (par exemple si le processus du serveur redémarre). Une autre option consiste à ajouter l'heure de déconnexion la prochaine fois que l'utilisateur se connecte: lors de sa connexion, vous vérifiez les anciennes sessions et supposez que celles qui n'ont pas été fermées durent depuis la dernière page. .

C'est vraiment tout ce que vous pouvez faire.

0

En ce qui concerne la fermeture du navigateur/onglet, vous pouvez lier l'événement unload (window.onunload, $(window).unload(fn) jQuery, ou tout autre) pour notifier votre serveur. Une solution plus générale serait de faire un ping périodique de votre serveur (par exemple, toutes les 5 minutes), mais cela pourrait être ennuyeux pour l'utilisateur, faites-le donc judicieusement.

0

Il est important de se rappeler que toutes les fonctions de session/connexion dans PHP sont habituellement basé sur les cookies. Donc, en changeant la durée de vie du cookie de session devrait résoudre votre problème:

http://us3.php.net/manual/en/function.session-set-cookie-params.php

En outre, vous pouvez définir les sessions PHP afin qu'ils utilisent uniquement les cookies:

http://us2.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies

Encore une fois, vous pouvez attraper la fenêtre du navigateur/onglet fermer mais ... pourquoi? Par exemple, je peux avoir votre site ouvert dans plusieurs onglets.Si je ferme l'un de ces onglets, devrais-je être automatiquement déconnecté de votre site? C'est un très mauvais design. Au lieu de cela, définissez la durée de vie de la session pour qu'elle expire si le navigateur est fermé et pas seulement un onglet. (Notez également que window.unload se logout si une fenêtre sur votre site qui ferme -. Y compris un pop-up ou un iframe Voulez-vous vraiment?)

http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

Si vous voulez stocker l'état de session dans une base de données, essayez oneoftheseguides. Ou, lancez le vôtre avec session_set_save_handler