ホームページ  >  記事  >  バックエンド開発  >  PHPのCookie削除テクニックを徹底解説_PHPチュートリアル

PHPのCookie削除テクニックを徹底解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:34:57824ブラウズ

まず、PHPマニュアルでPHPでCookieを削除する手順を見てみましょう

bool setcookie ( string name [, string value [, intexpire [, string path [, string domain [, bool secure]]]]] ] )

Cookie を削除するには、ブラウザの削除メカニズムをトリガーするために、その有効期限が過去であることを確認する必要があります。次の例は、設定したばかりの Cookie を削除する方法を示しています。 例 2. setcookie() delete
Example

// 有効期限を 1 時間前に設定します
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);

PHP で Cookie を削除する方法は、有効期間を設定することです。 Cookie を現在時刻に戻す 過去には、これがほぼすべての PHP プログラマーが行っていたことです。

その後、PHP を初めて使用した友人が、プログラム内で Cookie の値を空に設定したいと言いましたが、Cookie は直接削除されました。当時の私の最初の反応は、信じられないということでしたので、テストしてみました

setcookie("testcookie", '');
print_r($_COOKIE);

その結果、$_COOKIE 配列全体が$_COOKIE['testcookie'] が空であるだけではなく、winsock を使用してパケットをキャプチャし、返された http ヘッダーが Set-Cookie: testcookie=deleted=Mon であることがわかりました。 、2007 年 6 月 18 日 02:42:33 GMT。これは、 setcookie("testcookie", ''); が実際に Cookie testcookie を直接削除していることを示しています。PHP マニュアルにはこの状況についての説明がありません。

最後に、PHP Cookie 削除のソース コードを読んで、真実を発見しました。これはオープン ソースの利点です。不明な内部情報がある場合は、ソース コードを直接確認してください)

次の PHP Cookie 削除コードは、Linux ソース パッケージの ext/standard/head.c の行 99 付近にあります。 PHP5.20の

<ol class="dp-xml">
<li class="alt"><span><span>if (value && </span><span class="attribute">value_len</span><span> == 0) {  </span></span></li>
<li><span>/*   </span></li>
<li class="alt"><span>* MSIE doesn't delete a cookie when <br>you set it to a null value  </span></li>
<li><span>* so in order to force cookies to be <br>deleted, even on MSIE, we  </span></li>
<li class="alt"><span>* pick an expiry date 1 year and 1 <br>second in the past  </span></li>
<li><span>*/  </span></li>
<li class="alt">
<span>time_t </span><span class="attribute">t</span><span> = </span><span class="attribute-value">time</span><span>(NULL) - 31536001;  </span>
</li>
<li>
<span class="attribute">dt</span><span> = </span>PHP<span class="attribute-value">_format_date</span><span>("D, d-M-Y H:i:s <br>T", sizeof("D, d-M-Y H:i:s T")-1, t,<br> 0 TSRMLS_CC);  </span>
</li>
<li class="alt">
<span>sprintf(cookie, "Set-Cookie: <br>%</span><span class="attribute">s</span><span>=</span><span class="attribute-value">deleted</span><span>; </span><span class="attribute">expires</span><span>=%s", name, dt);  </span>
</li>
<li><span>efree(dt);  </span></li>
<li class="alt"><span>} else {  </span></li>
<li>
<span>sprintf(cookie, "Set-Cookie: %</span><span class="attribute">s</span><span>=%s", <br>name, value ? encoded_value : "");  </span>
</li>
<li class="alt">
<span>if (expires </span><span class="tag">></span><span> 0) {  </span>
</li>
<li>
<span>strcat(cookie, "; </span><span class="attribute">expires</span><span>=");  </span>
</li>
<li class="alt">
<span class="attribute">dt</span><span> = </span>PHP<span class="attribute-value">_format_date</span><span>("D, d-M-Y H:i:s T", <br>sizeof("D, d-M-Y H:i:s T")-1, <br>expires, 0 TSRMLS_CC);  </span>
</li>
<li><span>strcat(cookie, dt);  </span></li>
<li class="alt"><span>efree(dt);  </span></li>
<li><span>}  </span></li>
<li class="alt"><span>} </span></li>
</ol>

if (value && value_len == 0)、value_lenが0の場合、ソースコードに明確に示されています

sprintf(cookie, "Set-Cookie: %s=deleted;期限切れ=%s", name, dt) ;

は、Cookie を削除するために PHP の http ヘッダーをブラウザに送信します。最後に、

setcookie($cookiename, ''); または setcookie($cookiename) を使用すると結論付けることができます。 , NULL);

はすべてPHPで実現されます PHPはCookieを削除しますが、もちろんこれらのマニュアルには記載されていません。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445947.html技術記事まず、PHP マニュアルの PHP で Cookie を削除する手順を見てみましょう bool setcookie ( string name [, string value [, intexpir [, string path [, string domain [, bool secure]]]]] )削除...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。