Je crée une session lorsqu'un utilisateur se connecte de la manière suivante:
$_SESSION['id'] = $id;
Comment puis-je spécifier un délai d'expiration sur cette session de X minutes et lui demander ensuite d'exécuter une fonction ou une redirection de page une fois qu'il a atteint X minutes?
EDIT: J'ai oublié de mentionner que j'ai besoin de la session pour expirer en raison d'inactivité.
d'abord, stocke la dernière fois que l'utilisateur a fait une demande
<?php
$_SESSION['timeout'] = time();
?>
dans la demande suivante, vérifiez depuis combien de temps ils ont fait leur demande précédente (10 minutes dans cet exemple)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
Lorsque la session expire, les données ne sont plus présentes. Quelque chose comme:
if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
sera redirigé chaque fois que la session n'est plus active.
Vous pouvez définir la durée de vie du cookie de session à l’aide de session.cookie_lifetime
ini_set("session.cookie_lifetime","3600"); //an hour
EDIT: Si vous programmez la fin des sessions pour des raisons de sécurité (au lieu de votre commodité), utilisez la réponse acceptée, comme le montrent les commentaires ci-dessous, elle est contrôlée par le client et donc non sécurisée. Je n'ai jamais pensé à cela comme une mesure de sécurité.
Il suffit de vérifier d'abord que la session n'est pas déjà créée et sinon d'en créer un Ici, je le fixe pour 1 minute seulement.
<?php
if(!isset($_SESSION["timeout"])){
$_SESSION['timeout'] = time();
};
$st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>
<?php
if(time() < $st){
echo 'Session will last 1 minute';
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
Dans l'en-tête de chaque page a fonctionné pour moi pendant les tests du site (le site n'est pas encore en production). La page HTML à laquelle elle se termine termine la session et informe simplement l'utilisateur de la nécessité de se reconnecter. Cela semble être un moyen plus facile que de jouer avec la logique PHP . J'aimerais beaucoup commenter cette idée. Des pièges que je n'ai pas vus?
<?php
session_start();
if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}
else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>
La solution de Byterbit est problématique parce que:
pour les cookies, la définition de l’expiration via session.cookie_lifetime est la solution idéale en termes de conception et de sécurité! pour expirer la session, vous pouvez utiliser session.gc_maxlifetime.
expirer les cookies en appelant session_destroy peut générer des résultats imprévisibles car ils ont peut-être déjà expiré.
effectuer la modification du fichier php.ini est également une solution valable, mais elle confère une validité globale à l'expiration pour l'ensemble du domaine, ce qui pourrait ne pas être ce que vous voulez vraiment - certaines pages pourraient choisir de conserver certains cookies plus que d'autres.
session_cache_expire( 20 );
session_start(); // NEVER FORGET TO START THE SESSION!!!
$inactive = 1200; //20 minutes *60
if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: user_logout.php");
}
}
$_SESSION['start'] = time();
if($_SESSION['valid_user'] != true){
header('Location: ../....php');
}else{
source: http://www.daniweb.com/web-development/php/threads/124500
<?php
session_start();
if($_SESSION['login'] != 'ok')
header('location: /dashboard.php?login=0');
if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
// session inactive more than 10 min
header('location: /logout.php?timeout=1');
}
$_SESSION['last-activity'] = time(); // update last activity time stamp
if(time() - $_SESSION['created'] > 600) {
// session started more than 10 min ago
session_regenerate_id(true); // change session id and invalidate old session
$_SESSION['created'] = time(); // update creation time
}
?>