我刚刚为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');
第二个(集)不设置cookie。
知道可能导致它的原因吗?
答案 0 :(得分:3)
我认为你误解了cookies是如何工作的。
当HTTP请求到达时以及脚本开始执行之前,$_COOKIE
的内容设置为一次。
如果您使用setcookie
添加或修改Cookie,则在向服务器发送下一次 HTTP请求之前,此添加或修改将不可见。这就是您在Cookie::set
方法中所做的事情。
如果您通过查看Cookie::set
的内容(或使用$_COOKIE
来执行相同的操作来“测试”Cookie::get
,那么您将看不到对$_COOKIE
的更改cookie ,即使它们已被制作。
要查看您的期望,您应该将值{}添加到Cookie::set
{{1}}内。但是,我建议以不同的方式编写程序。您正在尝试使用像普通变量这样的cookie,而不是。
答案 1 :(得分:1)
如果您想要更改cookie的值,则无需先删除它,您可以直接调用Session::set('session_name');
并且cookie将被覆盖。只有当您不再需要cookie时才调用Session::remove('session_name');
。
答案 2 :(得分:0)
如果我正确理解你,你需要类似的东西
public static function set($name, $value,$expire)
{
setcookie($name, $value, $expire);
$_COOKIE[$name] = $value;
}