【发布时间】:2011-01-03 22:20:42
【问题描述】:
我刚刚为 Cookies 编写了非常简单的包装类,如下所示:
<?php
class Cookie {
// expire time of the cookie 31 days
private static $_expire = '2678400';
public static function set($name = null, $value = null, $expire = null) {
if (!empty($name)) {
$expire = !empty($expire) ? $expire : time() + self::$_expire;
if (setcookie($name, $value, $expire)) {
return true;
}
return false;
}
return false;
}
public static function get($name = null) {
if (!empty($name)) {
return !empty($_COOKIE[$name]) ? $_COOKIE[$name] : false;
}
return false;
}
public static function remove($name = null) {
if (!empty($name)) {
if (!empty($_COOKIE[$name])) {
if (setcookie($name, false, time() - self::$_expire)) {
unset($_COOKIE[$name]);
return true;
}
return false;
}
return true;
}
return false;
}
}
?>
但是我在最初设置 cookie 时遇到问题,然后我想通过首先调用来更改值:
Cookie::remove('session_name');
然后
Cookie::set('session_name');
第二个(set)没有设置cookie。
知道是什么原因造成的吗?
【问题讨论】:
-
另外 - 值得一提 - Cookie::set() 返回 true - 所以不太确定出了什么问题。我正在使用 print_r($_COOKIE) 找出设置了哪些 cookie,并在设置了所有设置的 cookie 后发送测试电子邮件 - 它不会创建它。
-
嗯,有两件事。你打电话给
Session::foo,而不是Cookie::foo(这可能是一个疏忽,但值得一试)。其次,$_COOKIE仅在下一个请求时填充。setcookie永远不会对同一个请求产生影响。如果您想跟踪设置的 cookie,请跟踪每次调用::set... -
是的 - 当然不是 Session(我正在输入它) - 不是很讨厌你的意思是 $_COOKIE 仅在下一个请求时填充 - 你的意思是下一次调用服务器 - 重新加载后?如果是这样 - 那么它就是 - 请阅读下面的评论。
标签: php cookies session-cookies