Heim >Backend-Entwicklung >PHP-Tutorial >Ein PHP-Neuling hat eine Frage zu Cookies

Ein PHP-Neuling hat eine Frage zu Cookies

WBOY
WBOYOriginal
2016-10-10 11:56:17906Durchsuche

Der Code lautet wie folgt:

<code>function cookie($name) {
    return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}

/**
 * 从客户端浏览器删除一个 Cookie。
 * @param  string $cookie_name 要删除的 Cookie 名称。
 * @return void
 */
function delete_cookie($cookie_name) {
    setcookie($cookie_name, '', time() - 2 * 24 * 3600);
    unset($_COOKIE[$cookie_name]);
}

delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>

Warum wird immer NULL ausgegeben? Warum wird „myvalue“ nicht einfach als Ausgabe ausgegeben?

Antwortinhalt:

Der Code lautet wie folgt:

<code>function cookie($name) {
    return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}

/**
 * 从客户端浏览器删除一个 Cookie。
 * @param  string $cookie_name 要删除的 Cookie 名称。
 * @return void
 */
function delete_cookie($cookie_name) {
    setcookie($cookie_name, '', time() - 2 * 24 * 3600);
    unset($_COOKIE[$cookie_name]);
}

delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>

Warum wird immer NULL ausgegeben? Warum wird „myvalue“ nicht einfach als Ausgabe ausgegeben?

COOKIE wird von Ihrem Client mitgebracht, daher sollte das COOKIE vom letzten Skript gesetzt werden. Allerdings löschen Sie jedes Mal, wenn Sie dieses Skript ausführen, das letzte Mal und setzen ein neues COOKIE COOKIE kann nur vom Skript gelesen werden, das beim nächsten Mal ausgeführt wird. Fahren Sie dann mit dem Zyklus „Löschen-Set-Löschen-Set“ fort. . . Ich kann es also nicht lesen.
Wenn Sie COOKIE in SESSION ändern, ist das Lesen von SESSION nicht so langsam wie COOKIE. Es wird auf dem Server gespeichert.

Denn die Zuweisung von COOKIE wird erst bei der nächsten Browsing-Anfrage wirksam. Aber Sie löschen es, wenn Sie es das nächste Mal durchsuchen, also frage ich mich immer wieder, wie viel Hass dieses COOKIE gegen Sie hegt ...

Sie haben $_COOKIE['mycookie'] in dieser Anfrage gelöscht und setcookie benötigt die nächste Anfrage, um wirksam zu werden.
$_COOKIE ist der Browser, der Cookie-Informationen an PHP weitergibt.
setcookie ist PHP Teilen Sie es dem Browser mit die Cookie-Informationen.
Das heißt, die Generierung von $_COOKIE['xxx'] erfordert, dass die -Anfrage , in der sich setcookie('xxx') befindet, zuerst ausgeführt wird

Wenn Sie „myvalue“ ausgeben möchten, können Sie es auskommentieren unset($_COOKIE[$cookie_name]);. Sie können es ausgeben

unset wird sofort wirksam, set_cookie wird jedoch erst bei der nächsten Anfrage wirksam.

Wenn der nicht gesetzte Satz gelöscht wird, ist das Ausgabeergebnis in ähnlicher Weise nicht der aktuelle set_cookie, sondern der letzte set_cookie.

Wenn ich zum Beispiel den nicht gesetzten Satz lösche und dann aktualisiere, wird string(7) "myvalue" angezeigt, kein Problem;

Dann habe ich myvalue in myvalue2 geändert und dann aktualisiert, und es wurde immer noch

angezeigt string(7) "myvalue"Erneut aktualisieren, um

anzuzeigen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn