6
votes

Déconnexion d'inactivité de l'utilisateur PHP

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.

Comment cela peut-il être fait? Comment puis-je vérifier l'inactivité puis effectuer une fonction pour les enregistrer ???


0 commentaires

10 Réponses :


2
votes

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é.

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.

Si votre serveur est lent ou si vous avez beaucoup d'utilisateurs, vous pouvez faire fonctionner ce script rarement.


1 commentaires

Ce n'est pas une solution efficace du tout.



4
votes

Vous pouvez définir la limite de l'heure de la session, comme: xxx

Voici la solution possible pour vous.


0 commentaires

0
votes

Utiliser nonset ($ _ session ["nom"]); ou session_destroy (); . Vous pouvez également modifier la valeur de la session.

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.

J'utilise personnellement des cookies et les faire expirer à un moment donné, mais tout ce qui flotte votre bateau.

si L'heure actuelle est supérieure à 30 secondes avant X (de la base de données)


0 commentaires

3
votes

Vous pouvez également faire: xxx

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: xxx


0 commentaires

2
votes

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.


1 commentaires

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_)



10
votes

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> xxx pré>

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();
}


0 commentaires

0
votes


$ (document) .Ready (fonction ()
{
Settimeout (Fonction () { Call Logout.php via AJAX }, 720000);

});
de
720000 signifie 12 minutes (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


0 commentaires

1
votes

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
    }
}
}


0 commentaires

0
votes

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();


0 commentaires

0
votes

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 xxx

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 xxx


0 commentaires