2010-10-31 17 views
0

ceci est mon code dans logout.phpCookies ne fonctionne pas correctement

<?php 
if(isset($_COOKIE['cookie-username']) || isset($_COOKIE['cookie-password'])) { 

    setcookie("cookie-username", NULL, time()-60*60*24*100); 
    setcookie("cookie-password", NULL, time()-60*60*24*100); 
} 
    header('Location: ../login') ; 
    ?> 

Je peux confirmer les témoins existent, si je fais une boucle pendant que je
Erreur fatale: taille maximale autorisée pour la mémoire de 134217728 octets épuisés (essayé d'allouer 79 octets) dans /home/ios/public_html/logout.php en ligne

ce qui signifie qu'il ne peut pas supprimer th e cookies ... J'ai fait beaucoup de googling, mais je n'arrive pas à comprendre pourquoi il ne va pas supprimer les cookies ...

Aide? Merci à l'avance

modifier: preuve de cookies: http://cl.ly/1c31120de4b722518b05

création de cookies:

if (isset($_POST['submit'])) { 

     try {   
      if (!isset($_POST['username']) || !isset($_POST['password']) || trim($_POST['username']) =='' || trim($_POST['password']) =='') {    throw new Exception('All Fields Are Required!'); 
      } 
      $username = strtolower($_POST['username']); 
      $password = md5(strtolower($_POST['password'])); 

      include('classes/config.php'); 

         [SQL REMOVED] 
      foreach ($pdo->query($sql) as $row) { 
       $dbPassword = $row['password']; 
      } 

      if (!isset($dbPassword)) { 
       throw new Exception('Invalid Username or Password!'); 
      } 

      if ($dbPassword == $password) { 
       if (!isset($_COOKIE['cookie-username']) || !isset($_COOKIE['cookie-password'])){ 

        $days = 1; 

        if (strtolower($_POST['remember']) == 'on') { 
         $days = 30; 
        } 


        setcookie("cookie-username", $username, time()+60*60*24*$days, "/"); 
        setcookie("cookie-password", $password, time()+60*60*24*$days, "/"); 

       } 

        echo '<META HTTP-EQUIV="Refresh" Content="0; URL=../index">';  
      } 
      else if ($dbPassword != $password) { 
       throw new Exception('Invalid Username or Password!'); 
      } 
     } 

      catch (Exception $e) { 
       $exception = $e->getMessage(); 
     } 
    } 
+0

bien, il ne quitte jamais la boucle while, donc les cookies ne sont jamais supprimés. Donc, je suis sûr que c'est 99.99999999999999999. – willium

+0

.. et c'est la raison de l'erreur fatale. Voir la réponse @ meze –

Répondre

1

Supprimez la boucle while. setcookie n'affecte pas $ _COOKIE.

Si cela ne fonctionne pas, essayez ceci:

<?php 
    setcookie("cookie-username", NULL, time()-60*60*24*100, "/", ".yourdomain.com"); 
    setcookie("cookie-password", NULL, time()-60*60*24*100, "/", ".yourdomain.com"); 
    header('Location: ../login') ; 
?> 

PS: En outre, il est une mauvaise idée de stocker login/mot de passe dans les cookies, dans un but d'authentification, il est préférable de stocker un drapeau en session

+0

+1 c'est ça. C'est effectivement une boucle infinie, remplissant la mémoire jusqu'à ce qu'elle se bloque. –

+0

ok, donc son infini, maintenant que je l'ai changé en seulement une déclaration if, il ne peut toujours pas supprimer cookie. – willium

+0

il devient une boucle de redirection infinie, et les cookies ne suppriment jamais. – willium

0
<? 
setcookie('cookie-username', 0, -1); 
setcookie('cookie-password', 0, -1); 
header('Location: example.com/path/login'); 
?> 
  1. Cette fonction ne jetez rien alors try est pas utilisable pour toi.
  2. $_COOKIES est actualisé uniquement lorsque le script démarre, puis si vous effacez le cookie, vous verrez les résultats de l'actualisation suivante.
+0

même chose arrive avec ça. – willium