PHP: Çerez sorun

5 Cevap php

Herkes benim koduyla yanlış ne olduğunu bana söyleyebilir misiniz?

<?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');

?>

Her nasılsa çerez kayıt veya gösterilmesini değil.

5 Cevap

İki öneri ...

a) yerine belirli bir yolu daha, bütün etki çerez görünür yapmayı deneyin

b) gezinirken böylece kolayca de-adamcağız için gerçekten yararlı olduğu, Çerezler geçerli listesini görebilirsiniz Firefox için Web Developer Toolbar alın.

Eğer (çerez HTTP yanıt ile gönderilir) sayfayı yeniden yükleyin kadar Cookie $ _COOKIE dizide görünmüyor

PHP, çerez aslında sayfayı yeniden kadar ayarlı değil. Sen $ _COOKIE bir değer almaya çalışırken hemen sonra çerez oluştururken, ancak bu değer $ _COOKIE henüz mevcut değil.

Bu superglobal dizilerin herhangi değerlerini değiştirmek için genellikle iyi bir fikir değil de, bunu yapabilirsiniz:

değiştirin:

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

ile:

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

setcookie $_COOKIE süper küresel moify değildir.

Şu anda '/ temp /' dizin mi? Değilse, çerez birlikte geçti olmayacaktır. Bunu yaparken yeni çerez bir dizin vermiyorum deneyin, oto zaten doğru bir şekilde ayarlayacaksınız.