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.
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:
- PHP stocke les fichiers de session dans le répertoire temporaire du système par défaut.
-
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):
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.
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.
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>”;
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();