Destruction de la Session PHP Sur le bouton de déconnexion

je travaille actuellement sur un site qui possède un log-in (Nom d'utilisateur et mot de passe) - la protection par mot de passe est assurée par le système d'exploitation du serveur web au niveau du dossier appelé domaine dans le système D'exploitation. Pour l'instant, cela devra se faire, jusqu'à ce que nous trouvions un système de login PHP approprié.

le code ci-dessous, est basé sur un question précédente sur le débordement de la pile.

j'utilise 3 fichiers (voir les extraits de code en bas).

Le processus est: - Cliquez sur le bouton Se connecter sur index.php - Entrer le nom d'utilisateur et le mot de passe pour accéder au fichier d'index d'authentification. - Cliquez sur le bouton Déconnexion, qui fait référence à la déconnexion.fichier php - il doit vider le cache et renvoyer l'utilisateur à l'index supérieur.

il ne 'détruit pas la session' dans le sens où on ne vous demande pas de ré-entrer le mot de passe lorsqu'on vous le demande, ce qui est essentiellement ce que je veux arriver.

ma connaissance minimale de php me laisse un peu perplexe ici.

index.php (haut niveau fichier avec bouton de connexion)

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<a href="authenticate/index.php">Log In Btn</a>
</body>
</html>

authentifier / index.php (ce dossier est protégé par mot de passe - contient le fichier index avec le bouton de déconnexion qui renvoie à la déconnexion.fichier php)

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Log out</title>
</head>
<body>
<a href="logout.php">Log Out Btn</a>
</body>
</html>

authentifier/déconnexion.php

<?php   
session_start(); //to ensure you are using same session
session_destroy(); //destroy the session
header("location:/index.php"); //to redirect back to "index.php" after logging out
exit();
?>
11
demandé sur Community 2012-01-25 15:09:17

3 réponses

Le dossier protégé par mot de passe a rien en rapport avec PHP!

la méthode utilisée est appelée "Basic Authentication". Il n'y a pas de croix-navigateur façons de "déconnexion", sauf à demander à l'utilisateur de fermer puis ouvrir leur navigateur...

Voici comment vous pouvez le faire en PHP à la place (supprimez complètement votre auth de base Apache dans .htaccess ou partout où il est première):

connexion.php:

<?php
session_start();
//change 'valid_username' and 'valid_password' to your desired "correct" username and password
if (! empty($_POST) && $_POST['user'] === 'valid_username' && $_POST['pass'] === 'valid_password')
{
    $_SESSION['logged_in'] = true;
    header('Location: /index.php');
}
else
{
    ?>

    <form method="POST">
    Username: <input name="user" type="text"><br>
    Password: <input name="pass" type="text"><br><br>
    <input type="submit" value="submit">
    </form>

    <?php
}

index.php

<?php
session_start();
if (! empty($_SESSION['logged_in']))
{
    ?>

    <p>here is my super-secret content</p>
    <a href='logout.php'>Click here to log out</a>

    <?php
}
else
{
    echo 'You are not logged in. <a href="login.php">Click here</a> to log in.';
}

déconnexion.php:

<?php
session_start();
session_destroy();
echo 'You have been logged out. <a href="/">Go back</a>';

Évidemment, c'est un très mise en oeuvre de base. Vous vous attendez à ce que les noms d'utilisateur et les mots de passe soient dans une base de données, pas comme une comparaison hardcoded. J'essaie juste de te donner une idée de comment faire le truc de la session.

J'espère que cela vous aidera à comprendre ce qui se passe.

25
répondu 2014-07-22 09:12:28

Donnez D'abord le lien de logout.php page bouton de déconnexion.Dans cette page de rendre le code qui est donné ci-dessous:

Voici le code:

<?php
 session_start();
 session_destroy();
?>

lorsque la session a commencé, la session du dernier utilisateur/utilisateur courant a été commencée, donc pas besoin de déclarer le nom d'utilisateur. Il sera supprimé automatiquement par le session_destroy méthode.

5
répondu Jana 2017-01-18 05:24:40

// déconnexion

if(isset($_GET['logout'])) {
    session_destroy();
    unset($_SESSION['username']);
    header('location:login.php');
}

?>

2
répondu Iulia 2018-02-19 13:06:06