0

Cookie の非常に単純なラッパー クラスを作成しました。次のようになります。

<?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');

2 つ目 (set) は Cookie を設定しません。

何が原因でしょうか?

4

3 に答える 3

3

クッキーの仕組みを誤解していると思います。

の内容は、HTTP 要求が到着したとき、スクリプトの実行が開始される前に一度だけ$_COOKIE設定されます。

を使用して Cookie を追加または変更した場合、この追加または変更は、サーバーへの次のHTTP リクエストsetcookieまで表示されません。これは、メソッドで行っていることです。Cookie::set

Cookie::setのコンテンツを見て$_COOKIE(またはCookie::get同じことを行う を使用して) 「テスト」している場合、Cookie が変更されていても、Cookie への変更は表示されません。

期待するものを確認するには、値を$_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

私があなたを正しく理解していれば、あなたはそのようなものが必要です

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

   $_COOKIE[$name] = $value;    

}
于 2011-01-03T13:55:23.147 に答える