Sessions PHP chronométrer trop rapidement

J'utilise des Sessions php sur mon site web et il semble qu'elles" disparaissent " à des intervalles aléatoires. Je ne sais pas s'ils temporisent en raison de l'inactivité ou si quelque chose ne va pas avec mon code, mais existe-t-il un moyen de contrôler les sessions de quand elles expirent?

Comme Puis-je mettre quelque chose dans mon code ou changer quelque chose dans le php.fichier ini?

Update - {[6] } donc juste et mise à jour ici, j'ai changé d'hôte et comme par magie les sessions ont commencé à fonctionner. Je n'ai aucune idée de ce qui était faux mais apparemment, ils ne voulaient pas travailler correctement.

31
demandé sur Adam Libuša 2010-08-13 15:55:44

4 réponses

L'expiration aléatoire est un symptôme classique du répertoire de données de session partagé par plusieurs applications: celui avec le temps session.gc_maxlifetime le plus court est susceptible de supprimer des données d'autres applications. La raison:

  1. PHP stocke les fichiers de session dans le répertoire temporaire du système par défaut.
  2. Le gestionnaire de fichiers intégré ne suit pas qui possède quel fichier de session (il correspond simplement au nom du fichier avec l'ID de session):

    Rien bug bons vieux fichiers

Mon conseil est que vous configurez un répertoire de session personnalisé privé pour votre application. Cela peut être fait avec le session_save_path() Fonction ou réglage du session.save_path directive de configuration . Veuillez vérifier la documentation de votre framework pour les détails précis sur la façon de le faire dans votre propre base de code.

43
répondu Álvaro González 2016-09-15 12:57:43

Debian utilise un travail cron pour expirer automatiquement les sessions de manière sécurisée. Si vous utilisez Debian, regardez /etc / cron.d / php5.

14
répondu Docunext 2010-08-28 19:55:03

Vous pouvez l'utiliser technique pour rendre compatible votre application selon vous. Vous devez faire quelques changements en fonction de votre système

// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get(’session.gc_maxlifetime’);

Modifie la valeur du délai D'expiration de la Session

// Change the session timeout value to 30 minutes  // 8*60*60 = 8 hours
ini_set(’session.gc_maxlifetime’, 30*60);
//————————————————————————————–

// php.ini setting required for session timeout.

ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);

//if you want to change the  session.cookie_lifetime.
//This required in some common file because to get the session values in whole application we need to        write session_start();  to each file then only will get $_SESSION global variable values.

$sessionCookieExpireTime=8*60*60;
session_set_cookie_params($sessionCookieExpireTime);
session_start();

// Reset the expiration time upon page load //session_name() is default name of session PHPSESSID

if (isset($_COOKIE[session_name()]))
    setcookie(session_name(), $_COOKIE[session_name()], time() + $sessionCookieExpireTime, “/”);
    //————————————————————————————–
    //To get the session cookie set param values.

    $CookieInfo = session_get_cookie_params();

    echo “<pre>”;
    echo “Session information session_get_cookie_params function :: <br />”;
    print_r($CookieInfo);
    echo “</pre>”;
6
répondu Rubyist 2018-05-14 08:16:42

Essayez d'utiliser cette partie du code:

  session_start();
  $inactive = 600;
  $session_life = time() - $_SESSION['timeout'];
  if($session_life > $inactive) { 
     session_destroy(); 
     header("Location: logoutpage.php"); 
  }
  $_SESSION['timeout']=time();
3
répondu pltvs 2010-08-13 12:02:05