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 :

Durée de vie d'une session


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par défaut Durée de vie d'une session
    Bonjour à tous.

    Je me casse la tête sur un problème concernant la durée de vie de mes sessions. Mon but est de passer des 24 minutes fixées par défaut par session.gc_maxlifetime à 4 heures.

    Le site étant hébergé en mutualisé, je n'ai pas la possibilité de changer php.ini.

    1ère tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ini_set('session.save_path',$_SERVER['DOCUMENT_ROOT'] . '/../repdestockage');
    ini_set('session.cache_expire',4 * 60);
    ini_set('session.cache_limiter','none');
    ini_set('session.cookie_lifetime',4 * 3600);
    ini_set('session.gc_maxlifetime',4 * 3600);
    session_start();
    Alors c'est super, les paramètres sont à priori pris en compte (test avec ini_get) MAIS quand, en local, je vois effectivement apparaître mes jolis fichiers de sessions dans le rep choisi, sur le serveur mutualisé le répertoire reste vide, que ce répertoire soit placé dans le rep public du site ou dans un niveau inférieur (avec 777 comme droits sur le rep). Et, évidemment, mes variables de sessions sont écrasées au bout de 24 minutes...

    2ème tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // inclusion des fonctions perso de gestion des sessions
    ini_set('session.save_handler','user');
    session_set_save_handler('_open','_close','_read','_write','_destroy','_gc');
    session_start();
    La voici, la voilà, la gestion personnalisée des sessions (j'ai essayé avec ou sans une classe) qui se sert d'une base mysql.

    En local, aucun problème, sur le serveur mutualisé, la directive session_set_save_handler me renvoit false...

    Je pense que j'ai essayé les deux alternatives possibles pour contourner le fait de ne pas pouvoir toucher à php.ini... Le plus énervant est que cela marche en local et pas sur le serveur mutualisé. Il pourrait sans doute s'agir de sa version de PHP... Je vous donne les infos de ce serveur, si quelqu'un a une suggestion, je suis preneur !

    Merci à tous,
    dbass.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    PHP Version 4.2.2 
     
    System Linux sylvester.devel.redhat.com 2.4.20-2.41smp #1 SMP Sun Feb 9 09:29:47 EST 2003 i686 athlon i386 GNU/Linux 
    Session Support enabled 
     
    Directive Local Value Master Value 
    session.auto_start
     On On 
    session.cache_expire
     240 180 
    session.cache_limiter
     none nocache 
    session.cookie_domain
     no value no value 
    session.cookie_lifetime
     14400 0 
    session.cookie_path
     / / 
    session.cookie_secure
     Off Off 
    session.entropy_file
     no value no value 
    session.entropy_length
     0 0 
    session.gc_maxlifetime
     14400 1440 
    session.gc_probability
     1 1 
    session.name
     PHPSESSID PHPSESSID 
    session.referer_check
     no value no value 
    session.save_handler
     files files 
    session.save_path
     /var/www/html/web/rep/www/toto/../toto_data/tmp /tmp 
    session.serialize_handler
     php php 
    session.use_cookies
     On On 
    session.use_trans_sid
     1 1

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par défaut
    Personne ?

    Je comprends vraiment pas le problème... Pour l'instant, j'ai fait une rustine avec un js qui reload la page avant les 24 minutes fatidiques mais c'est bourrin...

  3. #3
    Membre expérimenté Avatar de AurelBUD
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2004
    Messages : 202
    Par défaut
    Moi je declare la date de dernier acces dans une variable de session et à chaque foisn que j'accede a ma page je remet à jour cette variable.
    Si elle n'as pas été mise à jour pdt un temp x défini, la varible de session est detruite.

    Initialisation de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['last_access'] = time();
    Test du temps d inactivité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $timeout = 1440; //24 minutes
    if ( time()-$_SESSION['last_access'] > $timeout )
    {
    	session_destroy();
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par défaut
    Bien sûr, le problème est que si le garbage collector passe avant le timeout que tu définis, tes variables de sessions sont effacées... càd pour tuot timeout supérieur à session.gc_maxlife... paramètre que j'ai modifié avec ini_set pour contourner ce problème mais il n'est manifestement pas pris en compte sur le serveur mutualisé.

    Et pourquoi le session.save_path n'est-il pas non plus opérant ? Je ne vois pas ce que je rate... Y a t-il des paramètres Apache ou PHP qui empêchent ou court-circuitent les ini_set ? Je sais que le gros problème est que déjà les ini_set ne sont valable que pendant l'exécution du script donc je pensais que c'est pour cela que ini_set('session.gc_maxlifetime','grosse valeur') était ignoré mais non, en l'appelant bien avant session_start(), cela marche très bien en local. Mais surtout parce qu'en local mon iniset('session.save_path','mon_rep') est bien opérant alors qu'en distant, niet ! Du coup les fichiers de sessions sont je pense encore stocké dans le rep par défaut qui se prend le garbage collector aux intervalles fixés pour ce rep à savoir ces fameuses 24 minutes...

    Pourquoi est-ce que ma demande de changement de rep pour sauver les 'files' de sessions n'est pas prise en compte sur ce serveur mutualisé ???

    grr

  5. #5
    Membre expérimenté Avatar de AurelBUD
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2004
    Messages : 202
    Par défaut
    Pourquoi tu ne pauses pas la question à l'administrateur du serveur mutualisé ???

  6. #6
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    J'ai eu le même problème, et j'ai finalement programmé mon propre système de session...

    Si tu trouve une solution, je serais ravi de l'apprendre.

    Et si jamais tu pense créer un compteur de visiteurs en ligne sur ton site, dit toi que pour ce faire, ca créer un 2ieme système de session, donc aussi bien en utiliser qu'un seul ;p

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par défaut
    J'ai essayé une gestion de session mysql mais le php du mutualisé me renvoie false quand je veux debrayer en 'user' la gestion des sessions. Après, je pourrais effectivement recréer entièrement le méchanisme des sessions, mais qand même... Ca devrait marcher !

    Bref, pour l'instant, je contourne le problème avec un javascript qui reload le fichier toutes les 20 minutes.

  8. #8
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Essayes avec session_regenerate_id ( true ) ; ???

    En passant comme paramètre true, tu effaces l'ancien fichier de session pour en créer un nouveau, c'est un peu lourd mais cela pourrait tromper l'ennemi.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par défaut
    bonne idée je vais tester !

    merci !

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

Discussions similaires

  1. définir une durée de vie d'une session
    Par ledébut dans le forum Langage
    Réponses: 14
    Dernier message: 05/05/2008, 08h53
  2. Paramétrer la durée de vie d'une session système
    Par Dosseh dans le forum Administration système
    Réponses: 4
    Dernier message: 16/07/2007, 13h23
  3. Durée de vie d'une session
    Par scorpion.os dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2007, 15h22
  4. Durée de vie d'une session
    Par khokho dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 28/06/2006, 21h31
  5. Réponses: 3
    Dernier message: 27/04/2006, 11h37

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