まず、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を削除しますが、もちろんこれらのマニュアルには記載されていません。