php setcookie の値が null または空の文字列の場合 (Cookie の削除)_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:49:03
オリジナル
1171 人が閲覧しました

PHP での Cookie の設定と削除は、PHP setcookie を使用して実現できます。設定されている場合は値が設定されます。削除された場合は、設定されます。 Cookie の値が空または null の場合、または期限が切れた場合は、削除できます。以下に例をいくつか見てみましょう。

長い間、php で Cookie を削除するときは、常に
を使用していました bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string

$domain [, bool $secure = false [, bool $httponly = false ]]]]])

$value を好きなように記述し、$expire を経過した時刻に設定します。

これは公式ドキュメントにも書かれています:

http://www.php.net/manual/en/function.setcookie.php

例 #2 setcookie() 削除の例
Cookie を削除するときは、有効期限が過ぎていることを確認してトリガー

を行う必要があります。

ブラウザの削除メカニズムは、前に送信された Cookie を削除する方法に続きます。

例:

コードは次のとおりですコードをコピー // 有効期限を 1 時間前に設定します
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
?>
今日不思議なことに、Cookieを設定する際に$valueに空の文字列を渡したのですが、結果としてCookieが削除されてしまいました

コードは次のとおりですコードをコピー

相当不解。

翻訳php 5.4.13 のソースコード:

ext/standard/head.c

$name = "post_url";

$value = "";
setcookie($name, $value, time()+60*60*3, "/" );

Cookieの削除

代码如下复制幣
173 PHP_FUNCTION(setcookie)

174{
175 char *名前、*値 = NULL、*パス = NULL、*ドメイン = NULL;
176 有効期限が長い = 0;
177 zend_bool secure = 0、httponly = 0;
178 int 名前レン、値レン = 0、パスレン = 0、ドメインレン = 0;
179
180 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slssbb", &name,
) 181 &name_len、&value、&value_len、&expires、&path、
182 &path_len、&domain、&domain_len、&secure、&httponly) ==

失敗) {

183 戻る;
184 }
185
186 if (php_setcookie(name, name_len, value, value_len, 期限切れ, path, path_len, ドメイン,

domain_len、セキュア、1、httponly TSRMLS_CC) == SUCCESS) {

187 RETVAL_TRUE;
188 } else {
189 RETVAL_FALSE;
190 }
191 }
 
 
 
 76 PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, time_t

expires、char *path、int path_len、char *domain、intdomain_len、int secure、int url_encode、

int httponly TSRMLS_DC)

 77
 78 char *cookie, *encoded_value = NULL;
 79 int len=sizeof("Set-Cookie: ");
 80 文字 *dt;
 81 sapi_header_line ctr = {0};
 82 int 結果;
 83
 84 if (name && strpbrk(name, "=,; trn1314") != NULL) { /* man isspace for 13

と14 */

 85 zend_error( E_WARNING, "Cookie 名には次のいずれかを含めることはできません '=,;

trn 13 14'" );

 86 失敗を返します;
 87 }
 88
 89 if (!url_encode && value && strpbrk(value, ",; trn1314") != NULL) { /* man

は 13 と 14 のスペース */

 90 zend_error( E_WARNING, "Cookie 値には次のいずれかを含めることはできません ',;

trn 13 14'" );
 91 失敗を返します;
 92 }
 93
 94 len += name_len;
 95 if (値 && url_encode) {
 96 int encoded_value_len;
 97
 98 encoded_value = php_url_encode(value, value_len, &encoded_value_len);
 99 len += encoded_value_len;
100 } else if ( value ) {
101 encoded_value = estrdup(値);
102 len += value_len;
103 }
104 if (パス) {
105 len += path_len;
106 }
107 if (ドメイン) {
108 len += ドメインレン;
109 }
110
111 クッキー = emalloc(len + 100);
112
113 if (値 && 値の長さ == 0) {
114 /*
115 * MSIE は、Cookie を null 値に設定しても削除しません
116 * したがって、MSIE でも Cookie を強制的に削除するために、
117 * 過去の有効期限を選択してください
118 */
119 dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, 1, 0

TSRMLS_CC);
120 snprintf(cookie, len + 100, "Set-Cookie: %s=deleted;expires=%s", name, dt);
121 efree(dt);
122 } else {
123 snprintf(cookie, len + 100, "Set-Cookie: %s=%s", name, value ? encoded_value :

"");
124 if (有効期限 > 0) {
125 const char *p;
126 strlcat(cookie, "; 期限切れ=, len + 100);
127 dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1,

期限切れ、0 TSRMLS_CC);
128 /* 年の長さが 4 桁を超えていないことを確認します */
129 p = zend_memrchr(dt, '-', strlen(dt));
130 if (!p || *(p + 5) != ' ') {

C 言語におけるパラメータの値の型は char * であり、その長さを示す value_len もあります。 value_len が 0 の場合、次の cookie が書き込まれます:
「削除済み」、期間は Thu, 01-Jan-1970 08:00:01 CST または、Thu, 01-Jan-1970 00:00:01

GMT

見て来setcookie($name, “”) 确实可删削除可能Cookie了…

同様に、php中、strval(NULL) === "" , 所以 setcookie($name, NULL) 也就は setcookie($name,
) に相当します

「」)、同样可删このクッキー。

さらに、比較的興味深いものは:

代码如下复制幣if (値 && 値の長さ == 0) {

else には値が null の場合も含まれます。これはどのような状況ですか?

setcookie($name, "") は実際にこの Cookie を削除できるようです...
同様に、php では strval(NULL) === "" なので、setcookie($name, NULL) は setcookie($name,

) と同等です。

"")、この Cookie を削除することもできます。

さらに、私は次のことに興味があります:

}
他に{
}
コードは次のとおりです コードをコピー
if (値 && 値の長さ == 0) {
}
他に{
}

else には値が null の場合も含まれます。これはどのような状況ですか?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632738.html技術記事 php での cookie の設定と削除は、php setcookie を使用して実現できます。設定されている場合は、値を設定します。空または null の場合、または期限切れの場合は、削除できます。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート