phpクッキー削除方法の詳細
2665 ワード
まずクッキーに関するメカニズムを見てみましょう.
クッキーを削除するには、ブラウザの削除メカニズムをトリガーする前に、その失効期間が過去であることを確認する必要があります.
次の例では、さっき設定したクッキーを削除する方法を示します.
クッキーを削除する方法は、このクッキーの有効期間を現在の時間に設定することです.これもほとんどのphpプログラマーがそうします.
その後、phpに初めて触れた友达は、プログラムの中でクッキーの値を空に設定しようとしたが、その結果、このクッキーが直接削除されたと教えてくれた.私の最初の反応は信じられなかったので、テストしました.
結果はやっぱり全体$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ソースを読んで、やっと真相を発見しました(これがオープンソースのメリットで、何か分からない内幕があったら、直接ソースコードを調べます).
以下のコードはphp 5.20のlinuxソースパッケージのext/standard/head.c 99行目付近で見つかりました:
ソースコードには「if(value&&value_len==0)」がはっきりと表示され、「value_len」が0の場合、「sprintf(cookie、「Set-Cookie:%s=deleted;expires=%s、name、dt);」クッキーを削除するhttpヘッダがブラウザに送信されます.
最後にphpで「setcookie($cookiename,')」を使用すると結論できます.または「setcookie($cookiename,NULL);」クッキーは削除されますが、もちろんこれらのマニュアルにはありません.
簡単ではないでしょうか.phpソースをよく読む必要があることがあります.
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
クッキーを削除するには、ブラウザの削除メカニズムをトリガーする前に、その失効期間が過去であることを確認する必要があります.
次の例では、さっき設定したクッキーを削除する方法を示します.
//
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>
クッキーを削除する方法は、このクッキーの有効期間を現在の時間に設定することです.これもほとんどのphpプログラマーがそうします.
その後、phpに初めて触れた友达は、プログラムの中でクッキーの値を空に設定しようとしたが、その結果、このクッキーが直接削除されたと教えてくれた.私の最初の反応は信じられなかったので、テストしました.
setcookie("testcookie", '');
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ソースを読んで、やっと真相を発見しました(これがオープンソースのメリットで、何か分からない内幕があったら、直接ソースコードを調べます).
以下のコードはphp 5.20のlinuxソースパッケージのext/standard/head.c 99行目付近で見つかりました:
if (value && value_len == 0) {
/*
* MSIE doesn'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);」クッキーを削除するhttpヘッダがブラウザに送信されます.
最後にphpで「setcookie($cookiename,')」を使用すると結論できます.または「setcookie($cookiename,NULL);」クッキーは削除されますが、もちろんこれらのマニュアルにはありません.
簡単ではないでしょうか.phpソースをよく読む必要があることがあります.