2

RewriteRule を使用して htaccess でクッキングを作成しています。私のテストでは、この Cookie を削除することはできません。このスレッドで助けられたクッキーの作成方法は次のとおりです。

[L,CO=redirect_indicator:yes:.www.example.com,R=301]

そのため、Cookie にはデフォルトの有効期限があり、これはブラウジング セッションの間のみ有効です。スクリプトの最後でそれを破棄しようとしていますが、紛らわしい結果が得られています。

したがって、スクリプトの先頭でこれを実行して、テスト目的で Cookie を確認します。

var_dump($_COOKIE['redirect_indicator']);

次に、スクリプトの最後に次を実行します (別のスタック スレッドの助けを借りて、ここで) これよりもはるかに単純な破棄スクリプトも試しましたが、うまくいかないようです:

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

そのコードセクションの後、これも再度実行します。

var_dump($_COOKIE['redirect_indicator']);

そして事実、クッキーはそこにありません! これは素晴らしいことですが、Cookie を生成しないページでスクリプトを再度実行するとすぐに、最初の var_dump で Cookie が表示されます。

とにかく、この Cookie を取り除く方法はありますか、それとも、ブラウザーが保持しているものに常に翻弄されますか? ブラウザを再起動すると確かに消えますが、スクリプトの実行後にこれを消す必要があります。

4

2 に答える 2

1
setcookie($name, '', time()-1000);

上記は、Cookie を削除する唯一の方法である過去の有効期限を実際に設定しています。ただし、すべてのブラウザ ウィンドウが閉じられるまで、Cookie はユーザーのコンピュータから削除されません。

Cookie がスクリプトに影響を与えないようにする必要がある場合は、後で「削除」などの例外として定義できる値にリセットします。

if(isset($_COOKIE['redirect_indicator']) && $_COOKIE['redirect_indicator'] !== 'delete')
于 2012-04-12T17:06:26.627 に答える
1

いくつかの考え:

(1) スクリプトで $_COOKIE を読み取り、Cookie を上書きしてから、もう一度 $_COOKIE を調べます。その間に $_COOKIE は更新されましたか? ユーザーがhttp://www.php.net/manual/en/reserved.variables.cookies.phpに投稿したメモとして、次のように述べています。

" $_COOKIE の値は、ユーザー エージェントのリクエストで受け取った Cookie の内容によって決まります。

Cookie を設定した場合 (つまり、ブラウザに送信した場合)、次のリクエストまで返されないため、データは $_COOKIE に存在しません。"

$_COOKIE の 2 回目の呼び出しでは、スクリプトの開始時にこの変数が保持していた値がそのまま保持されます。$_COOKIE ではなく、ブラウザで Cookie が変更または削除されていないか確認してください。

(2) リンク先のスレッドでは、.htaccess に次のように記載する必要があります。

RewriteRule ^example/directory/go\.php$ example.com/go.php [L,CO=tracker:yes:.example.com,R=301]

いいえ:

[L,CO=redirect_indicator:yes:.www.example.com,R=301]

あなたが書いているように。その行の最初の部分を忘れていて、[フラグ] がその上にある RewriteRule に適用されたり、呼び出されたすべてのページに適用されたりする可能性はありますか?

(3) Cookie に保存する代わりに、古い URL をリダイレクトで渡してはどうでしょうか。

    RewriteRule ^(example/directory/go\.php)$ example.com/go.php?old=$1 [R=301]

その後、go.php で $_GET['old'] を解析できます。

于 2012-04-15T14:35:14.047 に答える