有谁能告诉我我的代码有什么问题?
<?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没有注册或显示。
答案 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。