web-dev-qa-db-fra.com

Détruire PHP Session de clôture

J'ai créé une page de connexion simple basée sur les sessions.

session_start();

et ajouté une page de déconnexion qui contient cette

session_destroy();

Maintenant, lorsque je ferme le navigateur/la page et que je le rouvre, les valeurs de la session sont toujours présentes.

Je veux savoir comment détruire complètement la session à la fermeture de la page/du navigateur.

13
sikas

si tu utilises:

session_set_cookie_params(0);
session_start();

Votre cookie de session sera détruit lorsque le navigateur sera fermé ... ainsi votre session sera bonne jusqu'à ce qu'ils ferment le navigateur. C'EST À DIRE. Vous vous connectez et vous êtes connecté, vous fermez le navigateur, vous le rouvrez, vous retournez sur le site et vous ne serez pas connecté.

24
superfro

Vous ne pourrez détecter que si la fenêtre du navigateur a été fermée à l'aide de javascript. Vous pourrez alors éventuellement déclencher une demande Ajax afin d'effectuer une action de déconnexion.

5
Treffynnon

Si la session existe, déconnectez-vous en détruisant la session et en redirigeant l'utilisateur vers la page d'accueil. Un cookie temporaire a été utilisé pour stocker l'identité de la session. Ce cookie est également détruit.

<?php
    // This is the logout page for the site.
    session_start();//access the current session.
    //if no session variable then redirect the user
    if (!isset($_SESSION['user_id'])) {
    header("location:index.php");
    exit();
    }else{ //cancel the session
        $_SESSION = array(); // Destroy the variables
        session_destroy(); // Destroy the session
        setcookie('PHPSESSID', ", time()-3600,'/', ", 0, 0);//Destroy the cookie
        header("location:index.php");
        exit();
    }
    ?>
0
csandreas1

Le serveur ne peut pas détecter les navigateurs ou les onglets fermés, vous pouvez utiliser Javascript ou Ajax mais je suis désolé, je ne suis pas au courant.

Ma suggestion est d'utiliser Session Timeout, donc la session sera détruite s'il n'y a aucune action de l'utilisateur. Ceci est un exemple :

// destroy every 2 minutes

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) {
    // last request was more than 2 minutes ago
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

// end of code

J'espère que cela vous aidera

0
Fahmi