Question

Je voudrais enregistrer la connexion, déconnexion et le temps de durée dans la base de données.

  • Le temps de connexion est créé lorsque l'utilisateur est authentifié (connecté avec succès)
  • Le temps de fermeture de session est créé lorsque l'utilisateur clique sur le bouton de fermeture de session
  • La durée est la déconnexion - temps de connexion. (Moins passeLogout LOGIN)

Mais le problème est, si l'utilisateur na pas cliquez sur le bouton de fermeture de session. 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 n'y a pas de navigation à d'autres page. Seulement 1 page

Était-ce utile?

La solution

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 ancien.

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. Lorsqu'une session a expiré, si l'a ouvert une session, il enregistre alors un événement « déconnexion » pour cet utilisateur.

Notez que vous ne pouvez pas utiliser (par exemple) l'événement Session_End du réSEAU, parce que ce ne sera pas appelé de manière fiable soit (par exemple, si le redémarrage du processus serveur).

Une autre option est d'ajouter le temps de fermeture de session prochaine fois que l'utilisateur connecte - lorsqu'ils se connectent, vous vérifiez les anciennes sessions et supposer que tout ce qui n'ont pas fermé duré un montant fixe de temps écoulé depuis le dernier coup de page.

C'est vraiment tout ce que vous pouvez faire.

Autres conseils

Il est important de se rappeler que toutes les sessions / fonctions log-in en PHP sont habituellement cookies à base. 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 / manuel / fr / session.configuration.php # ini.session.use-only-cookies

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

http: //us2.php .net / manuel / fr / session.configuration.php # ini.session.cookie-vie

Si vous voulez stocker l'état de session dans une base de données essayer une un de ces Guides . Ou, rouler avec votre session_set_save_handler

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top