2010-02-25 6 views
0

Quelqu'un peut-il me dire quel est le problème avec mon code?PHP: problème de cookie

<?php 
class MyCookie 
{ 
    private $expiration = 0; 
    private $path = ""; 
    private $domain = ""; 
    private $secure = false; 
    private $httponly = false; 
    private $names = array(); 

    public function __construct($e, $p = "/temp/", $s = false, $h = false) { 
     $this->expiration = $e; 
     $this->path = $p; 
     $this->domain = '.' . $_SERVER["SERVER_NAME"]; 
     $this->secure = $s; 
     $this->httponly = $h; 
    } 

    public function getDomain() { 
     return $this->domain; 
    } 

    public function write($name, $value) { 
     return setcookie($name, $value, time() + $this->expiration, $this->path, $this->domain, $this->secure, $this->httponly); 
    } 

    public function delete($name) { 
     return setcookie($name, $value, time() - $this->expiration, $this->path, $this->domain, $this->secure, $this->httponly); 
    } 

    public function read($name) { 
     return $_COOKIE[$name]; 
    } 
} 

session_start(); 

$cookie = new MyCookie(3600 * 24 * 30); 

$cookie->write('name', 'jun'); 

echo $cookie->read('name'); 

?> 

D'une manière ou d'une autre, le cookie ne s'enregistre pas ou ne s'affiche pas.

Répondre

2

Deux suggestions ...

a) Essayez de faire le cookie visible à votre domaine entier, plutôt qu'un chemin d'accès spécifié

b) Obtenez le Web Developer Toolbar pour Firefox afin que vous puissiez voir facilement le courant liste des cookies pendant que vous naviguez, ce qui est vraiment utile pour désembuage.

+0

Oui, j'ai changé le chemin vers le répertoire racine. merci –

4

Cookie ne sera pas affiché dans le tableau $ _COOKIE jusqu'à ce que vous rechargez la page (les cookies sont envoyés avec une réponse HTTP)

+0

Hmm .. Donc, je continue d'écraser le même index. –

2

En PHP, le cookie est pas réellement activé jusqu'à ce que la page se recharge. Vous créez le cookie puis essayez immédiatement d'obtenir une valeur à partir de $ _COOKIE, mais cette valeur n'existe pas encore dans $ _COOKIE.

0

Bien qu'il soit généralement pas une bonne idée de modifier les valeurs de l'un des tableaux superglobaux, vous pouvez le faire:

remplacer:

public function write($name, $value) { 
    return setcookie($name, $value, time() + $this->expiration, $this->path, $this->domain, $this->secure, $this->httponly); 
} 

avec:

public function write($name, $value) { 
    $_COOKIE[$name] = $value; 
    return setcookie($name, $value, time() + $this->expiration, $this->path, $this->domain, $this->secure, $this->httponly); 
} 

setcookie sera ne moque pas le superglobal $_COOKIE.

0

Votre répertoire est actuellement '/ temp /'? Sinon, le cookie ne sera pas transmis. Essayez de ne pas donner un nouveau répertoire au cookie pendant que vous y êtes, il sera automatiquement réglé sur le bon.

0

Yup ne s'enregistre pas car il a besoin de recharger la page.
Il fonctionne comme ceci:
_> Http Demande
_> Php SetCookie
_> Http Réponse avec en-tête cookie
-> Nouvelle Http Demande avec cookies
-> Php peut lire maintenant cookie.