IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Détecter la fin d'une SESSION


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    695
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 695
    Points : 131
    Points
    131
    Par défaut Détecter la fin d'une SESSION
    Bonjour,

    Y a-t-il un moyen de détecter automatiquement la fin d'une SESSION (quand l'utilisateur quitte le site d'une façon ou d'une autre) ?

    Cela afin d'enregistrer alors des données d'historique.

    Certes, il est possible d'enregistrer l'historique au fur et à mesure de la consultation, mais cela multiplie les requêtes vers le serveur.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le serveur ne peut pas savoir ce que fait le client donc non.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 121
    Points : 95
    Points
    95
    Par défaut
    Il y aurait un moyen mais ce n'est pas d'une précision infaillible : prévoir un appel en ajax toutes les x minutes qui mettraient à jour la valeur 'fin de session' dans ta table 'utilisateurs'.
    Si l'utilisateur ferme sa page, la maj ne se fera plus. Tu auras une précision de x minutes.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    695
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 695
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Merci de vos réponses.

    Le serveur ne peut pas savoir ce que fait le client donc non.
    Oui, c'est logique...

    Il y aurait un moyen mais ce n'est pas d'une précision infaillible : prévoir un appel en ajax toutes les x minutes qui mettraient à jour la valeur 'fin de session' dans ta table 'utilisateurs'.
    Oui, c'est une possibilité.

    Dans le même ordre d'idée, on peut enregistrer les modifs non pas à chaque fois, mais quand il y en a eu 3 ou 4.

    J'imagine qu'un javascript qui détecterait la fermeture de l'onglet ou du navigateur ne peut pas m'aider.

    D'ailleurs, y a-t-il un problème ?
    Une petite requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE table_utilisateurs SET historique='$petite_chaîne' WHERE ut_id='xxx'
    Ne va pas mettre à plat le serveur, même mutualisé.

    Je vais poser la question au serveur.

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    a ce moment là si tu veux travailler avec js, plutot créer un timer de la durée de la session qui est relancé dynamiquement à chaque action de l'utilisateur. Quand tu arrives à la fin de ton timer, tu arrives également à la fin de ta session

  6. #6
    Membre régulier
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Points : 91
    Points
    91
    Par défaut
    Il y a aussi des scripts JS qui détecte lorsqu'un utilisateur quitte le site, avec ça tu peux faire une requête Ajax en conséquence.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Ca fait couler de l'ancre ce problème d'activité ou non activité.
    Personne n'a eu encore de vrai solution, il n'y en a pas à mon avis, chacun à sa vision sur ce point.

    La seule chose qu'on sait, c'est lorsque l'utilisateur clique sur un lien, et que coté serveur on obtient la réponse (la requête HTTP).
    Après, c'est l'inconnue, on ne saura pas ce que fait exactement l'utilisateur.

    Utiliser Ajax, ça parait être une solution, mais ça reste néanmoins un mécanisme artificiel.
    Mais ça peu être aussi un sacré problème, car lancer des requêtes HTTP vers le serveur sur une période, ça fera une surcharge du serveur.
    S'il y a 1 seul visiteur, ça va, s'il y en a 1000, faut voir.
    Si tu est sur un mutualisé ça peu être un problème, car chaque requête HTTP est comptabilisée, et certains ont des quotas à ne pas dépasser.
    De plus, ceci risque fort de fausser les statistiques des pages visitées.



    Certes, il est possible d'enregistrer l'historique au fur et à mesure de la consultation, mais cela multiplie les requêtes vers le serveur.
    De quelle requête parle tu ? HTTP ou SQL ?
    Si c'est une requête SQL, rien de plus normal de vouloir enregistrer dans sa Bdd les pages visitées, c'est très courant.
    Faut voir ce que c'est l'historique.
    Si c'est un historique des pages visitées, il existe des services pour ça, certains sont libres.

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par pokap
    Il y a aussi des scripts JS qui détecte lorsqu'un utilisateur quitte le site, avec ça tu peux faire une requête Ajax en conséquence.
    Je suis curieux de savoir sur quoi ses script se basent pour savoir quand l'utilisateur quitte le site.
    Sur l'évènement onunload? onbeforeunload ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    695
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 695
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Encore merci de vos réponses.

    De quelle requête parle tu ? HTTP ou SQL ?
    Un requete SQL, je l'ai déjà montrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE table_utilisateurs SET historique='$petite_chaîne' WHERE ut_id='xxx'
    Je précise que $petite_chaîne est vraiment une petite chaîne, car l'idée est juste d'enregistrer les 10 derniers produits visités, chaque produit étant désigné par un numéro de 1 à 4 chiffres.

    En plus, cela ne concerne que les utilisateurs référencés.

    Bref, j'ose espérer que le serveur ne va tomber en rade...

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je précise que $petite_chaîne est vraiment une petite chaîne, car l'idée est juste d'enregistrer les 10 derniers produits visités, chaque produit étant désigné par un numéro de 1 à 4 chiffres.
    Et bien dans ces conditions, ceci n'a finalement aucun rapport avec la session.

    Pour enregistrer les 10 derniers produits visités, théoriquement il faudrait une table produits_visites, avec un champ id_user, et un champ id_produit, et éventuellement la date (un datetime) de la visite.

    Puis comme tu souhaite que les 10 dernier, et bien une 1ère requête serait nécessaire pour savoir s'il cette personne a déjà visité un produit, s'il y en a moins de 10 ou plus de 10, voir même savoir si c'est le même produit qu'il visualise.
    Selon le cas :
    - soit on ajoute une ligne (insert into) car il y en moins de 10
    - soit il y a déjà 10, alors on met à jour (update) le produit dont la date est la plus éloignée.
    - Si c'est le même produit, peut ne rien faire, ou juste mettre à jour la date.


    Créer une table avec un champ avec une chaine des 10 derniers IDs des produits par exemple, je ne suis pas certain que cela apporte un plus, ou que cela soit plus optimisé.
    Faut voir.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    695
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 695
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse,

    La discussion sort de la question initiale, mais comme tu prends le temps de suggérer :

    Pour enregistrer les 10 derniers produits visités, théoriquement il faudrait une table produits_visites, avec un champ id_user, et un champ id_produit, et éventuellement la date (un datetime) de la visite.
    Il est clair qu'il n'y a là aucun problème.

    J'utilise la table utilisateur qui existe déjà.
    J'ajoute un champ "Historique" qui sera varchar, ça suffira.

    L'historique est une variable de SESSION
    Il profite à tous les utilisateurs, référencés ou non, pour la durée de la SESSION.

    Quand un utilisateur référencé visite un produit :
    On vérifie si le produit figure ou non dans l'historique en SESSION.
    Si non, on enregistre l'historique dans la base SQL.

    De cette manière, l'utilisateur référencé pourra récupérer son historique à la prochaine consultation.

    L'utilisateur non-référencé aura bénéficié d'un historique le temps de sa SESSION.

Discussions similaires

  1. Détecter en premier la fin d'une session
    Par frédo dans le forum Delphi
    Réponses: 5
    Dernier message: 08/01/2007, 17h53
  2. Détecter la fin d'une session
    Par gazza dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2006, 11h47
  3. Détecter la fermeture d'une session Windows
    Par atao29 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 11h19
  4. [Servlet] Comment détecter la fin d'une session HTTP
    Par cocula dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/04/2005, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo