ホームページ > バックエンド開発 > PHPの問題 > PHPでCookieを削除する方法

PHPでCookieを削除する方法

藏色散人
リリース: 2023-03-07 10:50:01
オリジナル
2114 人が閲覧しました

php で Cookie を削除する方法: 1. "setCookie("name","",time()-60); を通じて 1 つの Cookie を削除します 2. foreach を使用して配列を走査して複数の Cookie を削除します。

PHPでCookieを削除する方法

# 推奨: 「

PHP ビデオ チュートリアル

#php cookie の削除

php Cookieを一括削除する簡単な実装方法

コードは次のとおりです:

<?php
//删除单个cookie:键值设置为空、时间设置为过期了的时间
setCookie("name","",time()-60);
//删除多个cookie,采用遍历数组方式
foreach($_COOKIE as $key=>$value){
 setCookie($key,"",time()-60);
}
?>
ログイン後にコピー

知識ポイント: WebサイトのCookieをすべて削除すると、WebサイトのCookieファイルが保存されます. が削除されます。Cookie を 1 つだけ削除した場合は、ファイル内の Cookie 情報のみが削除されます。

PHP Cookie の使用

1. Cookie の設定

PHP は SetCookie 関数を使用して Cookie を設定します。注意すべき点の 1 つは、Cookie は HTTP プロトコル ヘッダーの一部であり、ブラウザとサーバーの間で情報を転送するために使用されるため、HTML ファイル自体に属するコンテンツが出力される前に Cookie 関数を呼び出す必要があることです。

SetCookie 関数は Cookie を定義し、それを HTTP ヘッダーの末尾に追加します。SetCookie 関数のプロトタイプは次のとおりです:

int SetCookie(string name, string value, int expire, string path, string domain, int secure);
ログイン後にコピー

name を除くすべてのパラメーターはオプションです。 3 つのパラメータ値、パス、およびドメインは、設定されていないことを示す空の文字列に置き換えることができます。期限切れパラメータと安全なパラメータは数値であり、0 で表すことができます。期限切れパラメータは標準の Unix タイムスタンプで、time() または mktime() 関数を使用して秒単位で取得できます。

secure パラメータは、この Cookie が暗号化された HTTPS プロトコルを介してネットワーク上で送信されるかどうかを示します。

現在設定されている Cookie はすぐには有効になりませんが、次のページまで表示されません。これは、Cookie が設定されたページでサーバーからクライアントのブラウザに渡され、ブラウザが表示されないためです。次のページまで参照してください。Cookie がクライアントのマシンから削除され、サーバーに送り返される理由。

同じページ上の Cookie の設定は、実際には後ろから前に行われるため、新しい Cookie を挿入する前に削除したい場合は、最初に Insert ステートメントを記述してから、delete ステートメントを記述する必要があります。そうしないと、望ましくない可能性があります。結果が生じる可能性があります。

いくつかの例を見てみましょう:

シンプル:

SetCookie("MyCookie", "Value of MyCookie");
ログイン後にコピー

有効期限付き:

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时
ログイン後にコピー

すべてが揃っています:

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);
ログイン後にコピー

ありここでもう 1 つの注意点があります。たとえば、サイトに複数の異なるディレクトリがある場合、パスなしで Cookie のみを使用すると、あるディレクトリのページに設定された Cookie が別のディレクトリのページでも使用されます。つまり、Cookie はパス指向です。実際、パスが指定されていない場合でも、WEB サーバーは現在のパスを自動的にブラウザーに渡し、パスを指定すると、サーバーは設定されたパスを使用するように強制されます。この問題を解決するには、SetCookie を呼び出すときにパスとドメイン名を追加します。ドメイン名の形式は「www.phpuser.com」または「.phpuser.com」です。

SetCookie 関数の値を表す部分は、渡すときに自動的にエンコードされます。つまり、値の値が「テスト値」の場合、渡されたときに「テスト値」になります。 URLと同じで方法も同じです。もちろん、PHP は Cookie 値を受信すると自動的にデコードするため、これはプログラムに対して透過的です。

同じ名前の Cookie を複数設定したい場合は配列を使用します。メソッドは

SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");
ログイン後にコピー

または

SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");
ログイン後にコピー

2 です。Cookie を受信して​​処理します

PHP Cookie の受信と処理のサポートは非​​常に優れており、完全に自動で行われ、FORM 変数の原理と同じで非常にシンプルです。

たとえば、MyCookier という名前の Cookie を設定すると、PHP は WEB サーバーが受信した HTTP ヘッダーから自動的にそれを解析し、$myCookie という名前の通常の変数と同じように変数を作成します。この変数の値はクッキーの値。配列にも同じことが当てはまります。もう 1 つの方法は、PHP のグローバル変数 $HTTP_COOKIE_VARS 配列を参照することです。

例は次のとおりです: (これらが前のページで設定されており、まだ有効であると仮定します)

echo $MyCookie;
echo $CookieArray[0];
echo count($CookieArray);
echo $HTTP_COOKIE_VARS["MyCookie"];
ログイン後にコピー

それはとても簡単です。

3. Cookie の削除

既存の Cookie を削除するには、2 つの方法があります:

最初に、name パラメーターのみを指定して SetCookie を呼び出します。その後、名前は次の Cookie になります。の名前は、関連するユーザーのコンピュータから削除されます;

別の方法は、Cookie の有効期限を time() または time()-1 に設定することで、ページが閲覧された後に Cookie が削除されます。 (実際には無効になります)。

Cookie が削除されても、その値は現在のページで引き続き有効であることに注意してください。

4. Cookie の使用に関する制限

まず、HTML ファイルのコンテンツを出力する前に設定する必要があります。

第 2 に、Cookie を処理するブラウザが異なります。一貫性がなく、場合によっては不正確な結果が発生することがあります。例: MS IE SERVICE PACK 1 はドメイン名とパスを持つ Cookie を正しく処理できません。Netscape Communicator 4.05 および MS IE 3.0 はパスと時間がない Cookie を正しく処理できません。 MS IE 5 に関しては、ドメイン名、パス、時刻を含む Cookie を扱うことができないようです。これは、このサイトのページをデザインしているときに発見したものです。

3 番目の制限はクライアント側にあります。

ブラウザで作成できる Cookie の最大数は 30 で、それぞれ 4KB を超えることはできません。各 Web サイトで設定できる Cookie の総数は 20 を超えることはできません。

PHP Cookie 削除メソッド

首先我们看一下php手册中关于删除cookie的说明

------以下引用php手册内容--------------

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
ログイン後にコピー

要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除

例子

// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束--------------------------
ログイン後にコピー

删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这

也是几乎所有php程序员都会这么做。

后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试了一下

setcookie("testcookie", &#39;&#39;);
print_r($_COOKIE);
ログイン後にコピー

结果果然是整个$_COOKIE数组都是空的,而非仅仅$_COOKIE['testcookie']为空.于是用winsock抓包,观察返回的http头,发现http头竟然是

Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT
ログイン後にコピー

这说明setcookie("testcookie", '');的的确确是将testcookie这个cookie直接删除.而关于这种情况在php手册中完全没有说明.

最后阅读php源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕直接查源码)

以下代码可以在php5.20的Linux源码包中ext/standard/head.c第99行附近找到.

if (value && value_len == 0) {
/*
    * MSIE doesn&#39;t delete a cookie when you set it to a null value
    * so in order to force cookies to be deleted, even on MSIE, we
    * pick an expiry date 1 year and 1 second in the past
    */
time_t t = time(NULL) - 31536001;
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
efree(dt);
} else {
sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
if (expires > 0) {
strcat(cookie, "; expires=");
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
strcat(cookie, dt);
efree(dt);
}
}
ログイン後にコピー

源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0时

sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
ログイン後にコピー

会发送删除cookie的http头给浏览器.

最后我们可以得出结论,在php中使用

setcookie($cookiename, &#39;&#39;);或者 setcookie($cookiename, NULL);
ログイン後にコピー

都会删除cookie,当然这些手册中并没有。

以上がPHPでCookieを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート