2010-06-15 8 views
1

J'ai un problème lorsque vous essayez de vous connecter .. ci-dessous est mon code pour la connexionproblème Déconnexion/session ne détruit

<?php 
session_start(); 
include("functions.php"); 
    connecttodb(); 

if(!empty($_SESSION['loggedin']) && !empty($_SESSION['username'])) 
{ 
    echo "already logged in"; 
header("refresh:3; url=main.php"); 

} 

if(!empty($_POST['username']) && !empty($_POST['password'])) 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 


    $sql="SELECT * FROM admin WHERE admin_username ='".$username."' AND admin_password= '".$password."'"; 
    $result=mysql_query($sql) or die(mysql_error()); 
    echo $sql; 

    if(mysql_num_rows($result) == 1) 
    { 
     $row = mysql_fetch_array($result); 
     $acc = $row['account']; 

     $_SESSION['username'] = $username; 
     $_SESSION['account'] = $acc; 
     $_SESSION['loggedin'] = 1; 

     echo "<h1>Success</h1>"; 
     echo "<meta http-equiv='refresh' content='=2;panel.php' />"; 
    } 
    else 
    { 
     echo "<h1>Error</h1>"; 
     echo "<p>Please <a href=\"login.php\">click here to try again</a>.</p>"; 
    } 
} 
else 
{ 
    ?> 



    <form method="post" action="login.php" name="loginform" id="loginform"> 
    <fieldset> 
     <label for="username">Username:</label><input type="text" name="username" id="username" /><br /> 
     <label for="password">Password:</label><input type="password" name="password" id="password" /><br /> 
     <input type="submit" name="login" id="login" value="Login" /> 
    </fieldset> 
    </form> 

    <?php 
} 
?> 

Mon fichier logout

<?php 
$_SESSION = array(); 
session_unset(); 
session_destroy(); 


echo "Logged Out !"; 
header("Location:login.php"); 

?> 

Le problème est que quand je essayer de se déconnecter la session n'est pas détruite. Quand il redirige vers la page de connexion, il dit que je suis déjà connecté. Comment puis-je détruire complètement la session lorsque les utilisateurs cliquent sur la déconnexion?

Répondre

21

changer à ce qui suit la déconnexion:

<?php 
session_start(); # NOTE THE SESSION START 
$_SESSION = array(); 
session_unset(); 
session_destroy(); 

// echo "Logged Out!"; 
// Note: Putting echo "Logged Out!" before sending the header could result in a "Headers already sent" warning and won't redirect your page to the login page - pointed out by @Treur - I didn't spot that one.. Thanks... 
header("Location:login.php"); 
exit(); # NOTE THE EXIT 
?> 

Le session_start() est toujours besoin pour chaque page en traitant des sessions.

Assurez-vous que exit() la page lors de l'utilisation header() avec Location comme la page continuera à s'exécuter.

+0

Note: Mettre l'écho "Déconnecté!" avant d'envoyer l'en-tête pourrait entraîner un avertissement "En-têtes déjà envoyés" et ne redirigera pas votre page vers la page de connexion – Treur

+0

Ouais bon point, ils ne seraient pas d'avoir remarqué cette erreur sans un exit(); ou peut-être signaler des erreurs. – Lizard

+0

bon un +1 .... –

5

Je pense que vous avez oublié le session_start() avant $ _SESSION = array(); dans votre script de déconnection

Questions connexes