0

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

知道可能是什么原因造成的吗?

4

3 回答 3

3

我认为您误解了 cookie 的工作原理。

的内容在 HTTP 请求到达时和脚本开始执行之前$_COOKIE设置一次。

如果您用于setcookie添加或修改 cookie,则此添加或修改将在下一次对您的服务器的 HTTP 请求之前可见。这就是你在你的Cookie::set方法中所做的。

如果您通过查看(或使用,它做同样的事情)Cookie::set的内容来“测试”,那么即使已经对 cookie 进行了更改,您也不会看到更改。$_COOKIECookie::get

要查看您的期望,您应该将值添加到$_COOKIEinside Cookie::set。但是,我建议以不同的方式编写程序。您正在尝试像普通变量一样使用 cookie,但事实并非如此。

于 2011-01-03T13:47:55.107 回答
1

如果你想改变一个cookie的值,不需要先删除它,你可以直接调用Session::set('session_name');,cookie会被覆盖。Session::remove('session_name');仅当您不再需要 cookie 时才调用。

于 2011-01-03T13:46:36.023 回答
0

if I correctly understood you , you need something like that

public static function set($name, $value,$expire) 
{
    setcookie($name, $value, $expire);

   $_COOKIE[$name] = $value;    

}
于 2011-01-03T13:55:23.147 回答