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

Apache Discussion :

.htaccess avec une durée de session ?


Sujet :

Apache

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Bonjour _Mac_
    Bonjour à tous

    Je m'occupe de mettre en place le script, login, base... Je reviens vers toi ensuite.

    A propos de gestion de session avec htaccess, j'avais trouvé ces échanges :
    http://www.developpez.net/forums/d32...temps-session/
    http://www.hotscripts.com/forums/php...e-problem.html

    Merci

  2. #22
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, je pensais au paramètre session.gc_maxlifetime (mais sans le connaître ). Il faut voir avec l'hébergeur, faire un test, pour savoir s'il est accepté.

    Pour protéger ton fichier avec ta page de login, vois cette discussion.

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    J'ai donc mis en place le script Espace Membre avec ses 4 pages php, une base SQL et une table "membre". Jusque là, ça fonctionne.
    Il ne me reste plus qu'à faire fonctinner une durée de session.

    Pour cela, j'ai déplacé la page membre.php dans un repertoire protec dans lequel j'ai mis un htaccess comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <IfModule mod_php5.c>
    session.gc_maxlifetime "60"
    </IfModule>
    <IfModule mod_php4.c>
    session.gc_maxlifetime "60"
    </IfModule>
    RESULTAT : j'accède bien à la page protec/membre.php mais la durée de session ne semble pas fonctionner : je peux réactualiser la page indéfiniment.

    Mes questions :
    • La valeur 60 exprime-t-il bien des secondes ?
    • Comment faire fonctionner ce htaccess avec le script Espace Membre ?
    • En bref, il faudrait qu'en plus de rompre la session, et qu'une fois la session terminé, le htaccess puisse renvoyer l'utilisateur à la page d'identification ?

    Merci encore.
    PierreR75

  4. #24
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Oui, c'est en seconde. Il me semble qu'il manque un php_value devant. Mais j'enlèverais les IfModule pour ne mettre qu'une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value session.gc_maxlifetime 60

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Avec juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value session.gc_maxlifetime 60
    je passe le login mais j'ai un Internal Server Error ??

    J'ai essayé avec les php_value et les IfModule : pas de rupture de session

  6. #26
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Mes réponses sont toujours valables :
    • php_value ne sera pas reconnue (donc erreur 500) si PHP ne fonctionne pas comme module
    • le temps d'une session est de 24 minutes par défaut normalement (à moins d'une reconfiguration)
    • le réglage seul de session.gc_maxlifetime ne suffit pas à faire expirer une session (c'est une question de probabilité : revoir la doc)

    Mais j'ai déjà dit tout ça.

  7. #27
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par PierreR75 Voir le message
    je passe le login mais j'ai un Internal Server Error ??
    Il est censé se passer quoi après le login ? Qu'est-ce qui plante ?

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Bonjour et merci julp,

    Mon problème, c'est que je ne sais pas toujours interpréter ces réponses. Si j'ai un leger "vernis" de connaissances informatiques, je suis nul en programmation. Désolé.
    Ceci dit, cette dernière réponse m'amène encore de nouvelles questions :

    Citation Envoyé par julp Voir le message
    • php_value ne sera pas reconnue (donc erreur 500) si PHP ne fonctionne pas comme module
    Comment alors faire fonctionner PHP comme module ?

    Citation Envoyé par julp Voir le message
    • le temps d'une session est de 24 minutes par défaut normalement (à moins d'une reconfiguration)
    Voulez-vous dire que la session créée avec le script "Espace Membre" doit se terminer au bout de 24mn ? Ce serai parfait pour moi !

    Citation Envoyé par julp Voir le message
    • le réglage seul de session.gc_maxlifetime ne suffit pas à faire expirer une session (c'est une question de probabilité : revoir la doc)
    J'ai consulté cette documentation à plusieurs repises mais cela ne me dit rien, je n'en comprend pas le quart .

    Merci de votre indulgence et de votre aide.

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Il est censé se passer quoi après le login ? Qu'est-ce qui plante ?
    Après le login, il est censé s'afficher la page membre.php, c'est la page protégée.

    C'est le htaccess qui plante et qui m'envoie "Internal Server Error" quand je met juste cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value session.gc_maxlifetime 60

  10. #30
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par PierreR75 Voir le message
    Comment alors faire fonctionner PHP comme module ?
    Ce n'est pas vous qui décidez mais l'administrateur du serveur. Il me semble que chez OVH, PHP est en CGI (pour toutes ses configurations) et la modification des paramètres de PHP est très limitée (quelques paramètres par SetEnv - pas de php.ini). Il vous faudrait alors utiliser la fonction ini_set avant l'appel à session_start pour fixer cette durée. Qui je le rappelle, est à 1440 secondes par défaut (soit 24 minutes).

    Citation Envoyé par PierreR75 Voir le message
    Voulez-vous dire que la session créée avec le script "Espace Membre" doit se terminer au bout de 24mn ? Ce serai parfait pour moi !
    Oui et non. Disons qu'en théorie et avec une configuration par défaut, c'est le cas. Mais en réalité c'est plus complexe, car la vérification que la session a expiré n'a pas lieu à chaque démarrage/récupération de session. C'est là que je parlais de probabilité : celle-ci n'a lieu, par défaut, qu'une fois sur 100. Ça se règle via :
    session.gc_divisor en conjonction avec session.gc_probability définit la probabilité que la routine gc (garbage collection) soit démarrée à chaque début de session. La probabilité est calculée en utilisant gc_probability/gc_divisor, par exemple 1/100 signifie qu'il y a 1 % de chance pour que la routine gc démarre à chaque requête. La valeur par défaut est 100.
    Mais il est possible d'ajouter une "tâche planifiée" pour forcer la suppression des données des sessions expirées et/ou forcer l'expiration du cookie de session (en jouant sur session.cookie_lifetime) et/ou gérer ça vous même en gardant trace de la dernière activité (autre gestionnaire ou au sein même de la session). Toutefois, pour certaines de ces solutions, c'est discutable et pas nécessairement en rapport direct avec le sujet.

    PS : il y a quelques sujets similaires intéressants, tel : Timeout pour une session.

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Merci julp,

    Citation Envoyé par julp Voir le message
    Ce n'est pas vous qui décidez mais l'administrateur du serveur. Il me semble que chez OVH, PHP est en CGI (pour toutes ses configurations) et la modification des paramètres de PHP est très limitée (quelques paramètres par SetEnv - pas de php.ini). Il vous faudrait alors utiliser la fonction ini_set avant l'appel à session_start pour fixer cette durée. Qui je le rappelle, est à 1440 secondes par défaut (soit 24 minutes).
    J'ai donc essayé d'ajouter un ini_set à mon fichier membre.php ce qui donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    ini_set('session.gc_maxlifetime', '60');
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: index.php');
    	exit();
    }
    ?>
    <html>
    <head>
    <title>Espace membre</title>
    Vous avez 60 secondes !
    </head>
    <body>
    Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
    <a href="deconnexion.php">Déconnexion</a>
    </body>
    </html>
    mais la session reste active après les 60 secondes...

    J'ai aussi trouvé ces explications chez OVH qui correspondent à mon hébergement mutualisé :http://perso.ovh.net/test.php
    dans lesquelles il y a un chapitre "Session" ou session.gc_maxlifetime a en effet la valeur 1440.
    Donc, ça doit pouvoir fonctionner ??

    Citation Envoyé par julp Voir le message
    Oui et non. Disons qu'en théorie et avec une configuration par défaut, c'est le cas. Mais en réalité c'est plus complexe, car la vérification que la session a expiré n'a pas lieu à chaque démarrage/récupération de session. C'est là que je parlais de probabilité : celle-ci n'a lieu, par défaut, qu'une fois sur 100. Ça se règle via :
    session.gc_divisor en conjonction avec session.gc_probability définit la probabilité que la routine gc (garbage collection) soit démarrée à chaque début de session. La probabilité est calculée en utilisant gc_probability/gc_divisor, par exemple 1/100 signifie qu'il y a 1 % de chance pour que la routine gc démarre à chaque requête. La valeur par défaut est 100.
    La logique de ces probabilités m'échape complètement.
    Citation Envoyé par julp Voir le message
    Mais il est possible d'ajouter une "tâche planifiée" pour forcer la suppression des données des sessions expirées et/ou forcer l'expiration du cookie de session (en jouant sur session.cookie_lifetime) et/ou gérer ça vous même en gardant trace de la dernière activité (autre gestionnaire ou au sein même de la session). Toutefois, pour certaines de ces solutions, c'est discutable et pas nécessairement en rapport direct avec le sujet.
    Les cookies constituent-ils encore des solutions pertinentes, est-ce que les utilisateurs ne les désactivent pas ?

    Citation Envoyé par julp Voir le message
    PS : il y a quelques sujets similaires intéressants, tel : Timeout pour une session.
    Encore beaucoup d'informations en effet, mais qui me sont pas toujours très accessibles...

  12. #32
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par PierreR75 Voir le message
    Donc, ça doit pouvoir fonctionner ??
    C'est ce que je vous explique : l'expiration de la session n'étant vérifiée qu'une fois sur 100, peu importe la valeur que vous donnerez à session.gc_maxlifetime : il y a donc 99 % de chance que votre session n'expire jamais alors qu'elle devrait l'être.

    Si vous souhaitez utiliser les fonctionnalités de PHP, vous devez donc augmenter la probabilité de contrôle. Exemple :
    • une fois sur deux : session.gc_divisor = 100, session.gc_probability = 50
    • à tous les coups : session.gc_divisor = 100, session.gc_probability = 100

    (ou valeurs donnant le même ratio)
    Même chose, paramètres à définir via ini_set avant l'appel à session_start.

    (à configurer suivant le trafic : c'est sûr que si vous êtes à peine une poignée sur le site, les sessions ne seront jamais invalidées en temps et en heure avec une configuration par défaut)

    Citation Envoyé par PierreR75 Voir le message
    Les cookies constituent-ils encore des solutions pertinentes, est-ce que les utilisateurs ne les désactivent pas ?
    Déjà, il faudrait se documenter car une session est en principe basée sur un cookie. Le serveur (PHP en réalité), sinon, sera incapable de reconnaître à nouveau l'utilisateur et de lui restituer sa précédente session (et donc les données, côté serveur, qui vont avec). C'est pourquoi, à la création de la session, PHP crée un identifiant de session unique qu'il fait mémoriser au client par l'intermédiaire d'un cookie. Le client fournira ainsi, par la suite, cet identifiant, servant à faire l'association à la session qui lui correspond.

    PHP propose aussi un autre mode de transmission de session mais niveau sécurité et transparence, c'est bien en-deçà, donc déconseillé.

    Par ailleurs, l'expiration du cookie n'a rien à voir avec celle de la session. En ce qui concerne la session c'est bien en terme d'inactivité alors que celle de cookie est définie comme une échéance (il se terminera, quoi qu'il arrive à tel moment). Ce serait plutôt une mesure complémentaire qui n'est pas directement liée à la session. Ils sont totalement indépendants et l'un pourra subsister sans l'autre.

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Bonjour à tous, bonjour julp

    Citation Envoyé par julp Voir le message
    • une fois sur deux : session.gc_divisor = 100, session.gc_probability = 50
    • à tous les coups : session.gc_divisor = 100, session.gc_probability = 100
    Donc si je veux un contrôle systématique, est-ce que je peux mettre ça en terme de syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    ini_set('session.gc_maxlifetime', '60');
    ini_set('session.gc_divisor = 100, session.gc_probability = 100');
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: ../index.php');
    	exit();
    }
    ?>
    ...et comme ce code générait un message erreur, j'ai finalement essayé le code ci-dessous qui ne génère plus de message erreur, mais qui ne coupe pas la session
    Est-ce que c'est censé fonctionner comme ça ou faut-il que j'ajoute des lignes pour gérer un cookie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    ini_set('session.gc_maxlifetime', '60');
    ini_set('session.gc_divisor', '100');
    ini_set('session.gc_probability', '100');
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: ../index.php');
    	exit();
    }
    ?>
    Merci

  14. #34
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est bien la seconde proposition qu'il faut utiliser. La première, n'étant, évidemment pas valable.

    Et ça donne ?

    En ce qui concerne le cookie de session, PHP le gère tout seul. Mais si vous voulez en forcer l'expiration après un temps donné, le paramètre à modifier vous a été indiqué ainsi que son rôle précis.

  15. #35
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Je crois que j'entrevois une solution.

    Tout d'abord, je pense que j'avais un problème de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('session.gc_maxlifetime', '60');
    serait plus juste comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('session.gc_maxlifetime', 60);
    Avec cette nouvelle syntaxe, j'ai réussi 3 fois de suite, à couper la session après 24mn d'inactivité, la valeur par défaut donc, mais cette durée me convient bien. En revanche, les comandes probability et divisor ne semblent rien changer...

    Je vais continuer mes tests, je vous tiendrais au courant...
    Merci infiniment pour votre aide.

  16. #36
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    D'après la documentation, ini_set attend bien des chaînes, mais bon, PHP ne doit pas trop être regardant au niveau de la valeur.

    Par contre, quand au fait de marcher ou non, tout dépend de votre "protocole" de test :
    • pour que les paramètres soient pris en compte, ils doivent être placés avant chaque appel à session_start (après ça dépend de votre code - si vous utilisez une unique inclusion ou pas - pour protéger vos documents)
    • a priori, valide ou non, la session du premier à appeler session_start n'expire pas
    • s'assurer qu'aucun système de cache n'intervient non plus

    Et vérifier déjà dans la sortie d'un phpinfo que vos ini_set sont effectifs (parce que 1 minute, demandé, c'est pas la même chose que 24).

    Mais moins il y a de trafic moins ce système, seul du moins, est "fiable" !

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Bonjour à tous.

    Finalement, non, ça ne fonctionne pas !
    Ca a marché plusieurs fois hier, mais aujourd'hui la session reste désespérément active...
    C'est donc complètement aléatoire !

    Citation Envoyé par julp Voir le message
    • pour que les paramètres soient pris en compte, ils doivent être placés avant chaque appel à session_start (après ça dépend de votre code - si vous utilisez une unique inclusion ou pas - pour protéger vos documents)
    Que veux dire unique inclusion ? J'ai ça au début de tous mes fichiers protégés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    ini_set('session.gc_maxlifetime', 1440);
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: ../login.php');
    	exit();
    }
    ?>
    Citation Envoyé par julp Voir le message
    • a priori, valide ou non, la session du premier à appeler session_start n'expire pas
    Ca veut dire quoi ?

    Citation Envoyé par julp Voir le message
    • s'assurer qu'aucun système de cache n'intervient non plus
    De cache navigateur ? Je force toujours l'actualisation de la page avec CTRL + R

    Citation Envoyé par julp Voir le message
    Et vérifier déjà dans la sortie d'un phpinfo que vos ini_set sont effectifs (parce que 1 minute, demandé, c'est pas la même chose que 24).
    phpinfo, voilà un truc que je n'ai jamais utilisé.
    Pour essayer, j'ai créé un fichier info.php dans lequel j'ai donc mis ça :
    J'ai mis ce fichier dans mon répertoire et quand je l'appelle sous IE, il m'affiche en effet tout un tas de paramètres très intéressants et notamment dans le paragraphe Session ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session.gc_divisor 100 100 
    session.gc_maxlifetime 1440 1440 
    session.gc_probability 0 0
    Quel diagnostic ?
    Comment ça fonctionne ?
    Est-ce que les paramètres concernent le répertoire courant ou tout le site ?
    Qu'est-ce que je peux vérifier d'autres ?

    Citation Envoyé par julp Voir le message
    Mais moins il y a de trafic moins ce système, seul du moins, est "fiable" !
    Mon site n'est en pas destiné à faire du trafic et il me faut pourtant un systèmes fiable

    Merci encore infiniment du temps que vous passez pour m'aider.
    PierreR75

  18. #38
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je ne comprends pas, depuis le temps que je vous l'explique, et à moins d'avoir un trafic constant et conséquent, que vous ne remettiez pas les paramètres session.gc_divisor et session.gc_probability (surtout).
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('session.gc_divisor', '100');
    ini_set('session.gc_probability', '100');

    Une inclusion ? C'est appeler un code situé dans un autre fichier au lieu de copier/coller plusieurs fois le même. C'est pratique surtout quand on doit le modifier après.
    Au lieu d'écrire, ça à chaque début de fichier :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    ini_set('session.gc_maxlifetime', '1440');
    ini_set('session.gc_divisor', '100');
    ini_set('session.gc_probability', '100');
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: ../login.php');
    	exit();
    }
    ?>
    On le met dans un fichier à part (header.php ou je ne sais quoi) et on en fait ensuite usage par inclusion dans tous les fichiers qui en ont besoin ainsi :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    require_once('header.php');
    ?>
    (voir la doc)

    Citation Envoyé par moi-même
    a priori, valide ou non, la session du premier à appeler session_start n'expire pas
    Admettons 3 utilisateurs en ligne : A, B, C au moment X. Après cela, pas de nouveaux visiteurs aucun d'entre eux n'est présent donc leurs sessions ne sont plus utilisées et sont censées être expirées. B revient vers le site après 30 minutes, il récupèrera, a priori, sa session car c'est lui qui va invalider celle des autres (alors qu'il ne devrait pas en fait ; A et C perdront bien la leur). Donc si vous faites vos tests un peu de la même manière, vous pourriez ne pas perdre votre session après expiration.

    Enfin pour le phpinfo, il faut au moins que vous recopiez tous les ini_set avant son appel. Car comme je l'ai également dit, ini_set ne modifie les paramètres que du script courant (à défaut d'avoir une autre solution). Mais si session.gc_probability est à 0, la vérification et suppression des sessions expirées ne doit jamais être opérée.

    Par contre, vous avez bien un répertoire qui vous est propre où sont stockés les fichiers de session ? (réponse dans le phpinfo : ligne session.save_path sinon, il faudrait le redéfinir).

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 40
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par julp Voir le message
    Je ne comprends pas, depuis le temps que je vous l'explique, et à moins d'avoir un trafic constant et conséquent, que vous ne remettiez pas les paramètres session.gc_divisor et session.gc_probability (surtout).
    J'avais fait des tests hier avec les paramètres session.gc_divisor et session.gc_probability, sans constater de changerment... Je les ai remis.
    J'en ai profité pour mettre tout ça dans un include qui va effectivement ma faciliter la vie.

    Voilà mon include, il est appelé dans tous mes fichiers. J'ai mis une durée de 60 pour faciliter mes test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    ini_set('session.gc_maxlifetime', 60);
    ini_set('session.gc_divisor', '100');
    ini_set('session.gc_probability', '100');
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: ../login.php');
    	exit();
    }
    ?>
    Citation Envoyé par julp Voir le message
    Enfin pour le phpinfo, il faut au moins que vous recopiez tous les ini_set avant son appel. Car comme je l'ai également dit, ini_set ne modifie les paramètres que du script courant (à défaut d'avoir une autre solution). Mais si session.gc_probability est à 0, la vérification et suppression des sessions expirées ne doit jamais être opérée.
    Que voulez-vous dire par "recopiez tous les ini_set avant son appel"
    Citation Envoyé par julp Voir le message
    Par contre, vous avez bien un répertoire qui vous est propre où sont stockés les fichiers de session ? (réponse dans le phpinfo : ligne session.save_path sinon, il faudrait le redéfinir).
    Je n'ai rien fait pour. Dans le phpinfo, il est noté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.save_path /tmp /tmp
    Merci pour votre patience

  20. #40
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Pour le phpinfo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    ini_set('session.gc_maxlifetime', '1440');
    ini_set('session.gc_divisor', '100');
    ini_set('session.gc_probability', '100');
    phpinfo();
    Apparemment, tout le monde partage le même répertoire pour les sessions :/ Redéfinissez-le (toujours avec ini_set de la même façon - ini_set('session.save_path', 'un répertoire à vous avec les droits adéquats'). Ce serait mieux et vous ne risquez plus d'interférer avec celles des autres.

    Sinon, comment, précisément, testiez-vous l'expiration des sessions ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/12/2011, 20h33
  2. Créer une popup seule, avec une durée de vie dans le temps
    Par echantillon dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 16/02/2011, 20h39
  3. option de configurer une durée de session dans php
    Par Aquaa dans le forum Langage
    Réponses: 7
    Dernier message: 17/03/2010, 14h29
  4. Comment prévoir une durée de session avec htaccess ?
    Par PierreR75 dans le forum Sécurité
    Réponses: 2
    Dernier message: 23/12/2009, 09h14
  5. [MySQL] interdire les votes toutes les 5 minutes avec une variable de session
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/03/2008, 10h40

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