PHP:Cookie问题

时间:2010-02-25 14:23:26

标签: php class cookies

有谁能告诉我我的代码有什么问题?

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

?>

不知何故,cookie没有注册或显示。

6 个答案:

答案 0 :(得分:4)

在重新加载页面之前,Cookie不会显示在$ _COOKIE数组中(使用HTTP响应发送Cookie)

答案 1 :(得分:2)

两个建议......

a)尝试使cookie对整个域可见,而不是指定的路径

b)获取适用于Firefox的Web开发人员工具栏,以便您在浏览时轻松查看当前的Cookie列表,这对于解决问题非常有用。

答案 2 :(得分:2)

在PHP中,在页面重新加载之前,cookie实际上并未设置。您正在创建cookie,然后立即尝试从$ _COOKIE获取值,但该值在$ _COOKIE中尚不存在。

答案 3 :(得分:0)

虽然改变任何超全局数组的值通常不是一个好主意,但你可以这样做:

替换:

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

使用:

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超级全球化。

答案 4 :(得分:0)

您的目录目前是'/ temp /'吗?如果没有,cookie将不会传递。尝试不给新cookie一个目录,它会自动设置为正确的。

答案 5 :(得分:0)

是的,它没有注册,因为它需要重新加载页面 它的工作原理如下:
_&gt; Http请求
_&gt; Php SetCookie
_&gt;带有Cookie标头的Http响应
- &gt;带有cookie的新Http请求 - &gt; Php现在可以读取cookie。