Je veux que mes utilisateurs soient déconnectés automatiquement après x minutes d'inactivité. Je veux aussi avoir toutes les sessions détruites. p>
Comment cela peut-il être fait? Comment puis-je vérifier l'inactivité puis effectuer une fonction pour les enregistrer ??? p>
10 Réponses :
Selon la vitesse de votre serveur et le nombre d'utilisateurs que vous avez, vous pouvez envoyer une demande à votre serveur chaque fois qu'un utilisateur fait quelque chose (naviguer, clique sur un bouton, quoi que ce soit). Dans cette demande, mettez à jour une table SQL avec leur dernière période d'activité. P>
Avoir un travail de cron fonctionne à travers la table à un intervalle régulier et supprimez les sessions des utilisateurs qui ont été inactifs pour tout ce que votre seuil sera. P>
Si votre serveur est lent ou si vous avez beaucoup d'utilisateurs, vous pouvez faire fonctionner ce script rarement. P>
Ce n'est pas une solution efficace du tout.
Vous pouvez définir la limite de l'heure de la session, comme: Voici la solution possible pour vous. strong> p> p>
Utiliser Pour ce faire à un moment donné, vous devez définir un horodatage dans la base de données, puis l'appeler pour vérifier s'il est au-delà de X minutes. Regardez le lien en bas. P>
J'utilise personnellement des cookies et les faire expirer à un moment donné, mais tout ce qui flotte votre bateau. P>
si L'heure actuelle est supérieure à 30 secondes avant X (de la base de données) p> nonset ($ _ session ["nom"]); code> ou
session_destroy (); code>. Vous pouvez également modifier la valeur de la session. P>
Vous pouvez également faire: sur chaque page, et lorsque l'utilisateur tente de naviguer et qu'il a été inactif pendant vingt minutes, vous pouvez le connecter comme ceci: p>
Le mécanisme de session de PHP a déjà un collecteur à ordures basé sur le délai d'inactivité. Vous n'avez pas de souci de. P>
Un peu trompeurs - la collection de déchets n'a rien à voir lorsqu'une session devient désactivée - seulement le temps (plus tard) que les données sont effacées. La réponse est la durée de vie de la session (qui est confortablement préfixée par GC_)
Je suis fatigué Michiels approche et n'a pas eu d'endroit où. Sur investigation, j'ai vu que la déclaration IL a ajouté simplement la période d'expiration à l'heure actuelle, donc la déclaration n'a jamais été tirée.
Ceci est ma version altérée: p>
Définissez cette fois lors de la connexion à l'utilisateur ou de la chargement d'une page sécurisée. : p> et utilisez ceci pour voir si l'heure d'expiration est inférieure à celle de courant (c'est-à-dire que nous avons passé la limite d'expiration): P> if(time() > $_SESSION['expire']){
$user -> logout();
}
});
$ (document) .Ready (fonction ()
{
Settimeout (Fonction () { Call Logout.php via AJAX STROND>}, 720000); P>
de
720000 signifie 12 minutes forte> (pour l'illustration but)
Mettez ce script dans votre en-tête et fixez votre propre temps d'inactivité
vous pouvez définir à quelle heure tu veux, ce sera un travail comme
Si vous définissez 5 minutes alors lorsque vous vous connectez au système, il commence à compter pendant 5 min. Mais si vous cliquez sur n'importe quel module, ce script sera rechargé, car lorsque la page tourne, l'en-tête est également rechargée lorsque le script est rechargé, il commence à compter à partir de 0 (initial), mais si vous ne pouvez pas accéder au système dans les 5 minutes. Ensuite, il chargera le logout.php et le système se déconnectera p>
Vous pouvez définir le dernier temps actif par $ _session ['lastactive'] = heure () et la mise à jour à chaque fois que l'utilisateur navigue dans une nouvelle page. Ensuite, vous pouvez avoir un délai de fonctionnement () sur chaque page.
function timeout() { $maxtime = 60*2; // Here , maxtime has been set to 2 minutes if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] > $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. { signout(); //logging out } if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] < $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit. { return 1; // timeout limit not exceeded } else { if(!isset($_SESSION['lastactive'])) { $_SESSION['lastactive'] = time(); //if lastactive is not set } } }
C'est comme ça que je le fais:
//set timeout period in seconds $idleTime= 60*2; //check to see if $_SESSION['timeout'] is set if(isset($_SESSION['timeout'])){ $session_life = time() - $_SESSION['timeout']; if($session_life > $idleTime){ // your logout code here* } } $_SESSION['timeout'] = time();
Le moyen le plus simple est-ce. Envoyez l'utilisateur à une page de déconnexion si elles n'activent pas certains éléments de votre site Web contenu pour la redirection ... Logout.php, détruire toutes les sessions et peut-être aussi envoyer un message d'alerte L'utilisateur pourquoi ils ont été déconnectés p>