取消设置$ _COOKIE后,PHP setcookie()无效

时间:2011-01-03 13:39:08

标签: php cookies session-cookies

我刚刚为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。

知道可能导致它的原因吗?

3 个答案:

答案 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;    

}