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 :

[Sécurité] Détruire la session au bout de x minutes d'inactivité : même si actif...


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut [Sécurité] Détruire la session au bout de x minutes d'inactivité : même si actif...
    Bonjour,

    Je continue la lutte contre les sessions php et là un nouvel obstacle se présente.

    Je veux qu'après x minutes d'inactivité, la session se détruise toute seule.
    J'ai donc commis la chose suivante :

    1) Lors de l'identification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['dernier_acces']=time();
    2) Dans les pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(time()-$_SESSION['dernier_acces']>x) 
    {
      session_destroy(); 
    }
    Mais là il se trouve que même si l'utilisateur s'excite comme un fou sur le site, il est de toute façon déconnecté sans vergogne au bout de x minutes.


    D'où ma question audacieuse : Où ai-je bavé ?

    Et j'en profite même pour poser une deuxième question tout aussi audacieuse : qu'elle est la valeur convenable pour x, du point de vue de l'ergonomie et de la sécurité ?

  2. #2
    Membre du Club Avatar de goldorax113
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    salut,

    tu dis que tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $_SESSION['dernier_acces']=time();
    lors de l'indentification, mais faudrait it pas que tu le fasse à chaque fois qu'une page est chargée

    parce que sinon c normal qu'au bout de x minutes l'user se fasse deconnecter...

    Nico

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Oui, mais non, non ?

    Si je fais, sur chaque page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $_SESSION['dernier_acces']=time(); 
    if(time()-$_SESSION['dernier_acces']>10) 
    {
      session_destroy(); 
    }
    Ici $_SESSION['dernier_acces'] va être égal à time(), donc la condition ne sera jamais validé.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon alors j'ai essayé ça :

    Lors de l'identification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['premier_acces']=time();
    A chaque page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $_SESSION['dernier_acces']=time();
    if($_SESSION['dernier_acces']-$_SESSION['premier_acces']>10) 
    {
      session_destroy(); 
    }
    Je pensais que cela allait fonctionner, mais non, au bout de 10 secondes, actif ou non, l'utilisateur est déconnecté.

    **bon c'est normal que ça foire en fait. je fais quoi alors ?

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Et simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(time()-$_SESSION['dernier_acces']>x) 
    {
      session_destroy(); 
    }
    else
    {
    $_SESSION['dernier_acces'] = time();
    }
    non ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut



    Une question paranormale :
    1) J'affiche une page.
    2) J'attend 11 secondes (temps de déconnexion fixée à 10 pour le test).
    3) J'affiche une nouvelle page : toujours connecté.
    4) J'affiche encore une nouvelle page : cette fois je suis déconnecté.

    Pourquoi le message de déconnexion n'apparait-il pas dès l'étape 3 ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    renforce session_destroy par session_unset() et autres chose si y'en a

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Parce que session_destroy() ne détruit pas elle-même toutes les variables de session ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par psychoBob
    Parce que session_destroy() ne détruit pas elle-même toutes les variables de session ?
    session_destroy()
    Si l'on peut créer une session, il faut pouvoir la détruire. c'est simple avec cette fonction , il suffit de l'appeler et la session en cours sera supprimée.
    Il faut tout de même remarquer que les variables globales apportées par cette session avant sa destruction ne sont pas
    supprimées. Pour cela, il faut utiliser la fonction session_unset() .

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok, merci Ouatmad

    Donc je fais simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(time()-$_SESSION['dernier_acces']>10) 
    {
      session_destroy(); 
      session_unset();
    }
    Pas besoin pour chaque variable de session de faire session_unset(variable1) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 18h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 17h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 23h43

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