Heim  >  Artikel  >  Backend-Entwicklung  >  So löschen Sie Cookies in PHP

So löschen Sie Cookies in PHP

藏色散人
藏色散人Original
2020-11-05 11:19:082015Durchsuche

So löschen Sie Cookies in PHP: 1. Löschen Sie ein einzelnes Cookie über „setCookie(“name“,“,time()-60);“ 2. Löschen Sie mehrere Cookies mit foreach, um das Array zu durchlaufen.

So löschen Sie Cookies in PHP

Empfohlen: „PHP-Video-Tutorial

php Cookies löschen

php Eine einfache Möglichkeit, Cookies stapelweise zu löschen

Der Code lautet wie folgt:

<?php
//删除单个cookie:键值设置为空、时间设置为过期了的时间
setCookie("name","",time()-60);
//删除多个cookie,采用遍历数组方式
foreach($_COOKIE as $key=>$value){
 setCookie($key,"",time()-60);
}
?>

Wissenspunkte: Wenn Sie löschen Alle Cookies einer Website. Wenn alle Cookies gelöscht werden, wird auch die Datei gelöscht, in der die Cookies der Website gespeichert sind. Wenn nur eines der Cookies gelöscht wird, werden nur die Cookie-Informationen in der Datei gelöscht.

Verwendung von PHP-Cookies

1. Setzen von Cookies

PHP verwendet die SetCookie-Funktion, um Cookies zu setzen. Zu beachten ist, dass Cookies Teil des HTTP-Protokoll-Headers sind und zur Übertragung von Informationen zwischen Browser und Server dienen. Daher muss die Cookie-Funktion aufgerufen werden, bevor Inhalte ausgegeben werden, die zur HTML-Datei selbst gehören.

Die SetCookie-Funktion definiert ein Cookie und hängt es an das Ende des HTTP-Headers. Der Prototyp der SetCookie-Funktion lautet wie folgt:

int SetCookie(string name, string value, int expire, string path, string domain, int secure);

Alle Parameter außer dem Namen sind optional. Die drei Parameter „Wert“, „Pfad“ und „Domäne“ können durch leere Zeichenfolgen ersetzt werden, was darauf hinweist, dass sie nicht festgelegt sind. Die Parameter „Ablauf“ und „Sicher“ sind numerisch und können durch 0 dargestellt werden. Der Expire-Parameter ist ein Standard-Unix-Zeitstempel, der mit der Funktion time() oder mktime() in Sekunden abgerufen werden kann. Der Parameter

secure gibt an, ob dieses Cookie über das verschlüsselte HTTPS-Protokoll über das Netzwerk übertragen wird.

Das aktuell gesetzte Cookie wird nicht sofort wirksam, ist aber erst auf der nächsten Seite sichtbar. Dies liegt daran, dass das Cookie vom Server an den Browser des Clients auf der eingestellten Seite übergeben wird und der Browser das Cookie von dort aus ändern kann Server an den Browser des Clients auf der nächsten Seite. Der Grund, warum der Computer des Clients abgerufen und an den Server zurückgegeben wird.

Das Setzen von Cookies auf derselben Seite erfolgt eigentlich von hinten nach vorne. Wenn Sie also ein Cookie löschen möchten, bevor Sie ein neues einfügen, müssen Sie zuerst die Einfügeanweisung und dann die Löschanweisung schreiben, andernfalls möchten Sie dies möglicherweise nicht Ergebnis.

Schauen wir uns ein paar Beispiele an:

Einfach:

SetCookie("MyCookie", "Value of MyCookie");

Mit Ablaufzeit:

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时

Alles:

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

Hier gibt es noch etwas zu erklären, zum Beispiel, dass Ihre Website mehrere verschiedene Verzeichnisse hat Wenn Sie nur Cookies ohne Pfad verwenden, sind die auf einer Seite in einem Verzeichnis gesetzten Cookies auf einer Seite in einem anderen Verzeichnis nicht sichtbar. Mit anderen Worten: Cookies sind pfadorientiert. Selbst wenn der Pfad nicht angegeben ist, übergibt der WEB-Server automatisch den aktuellen Pfad an den Browser, und die Angabe des Pfads zwingt den Server, den festgelegten Pfad zu verwenden. Die Möglichkeit, dieses Problem zu lösen, besteht darin, beim Aufruf von SetCookie den Pfad und den Domänennamen hinzuzufügen. Das Format des Domänennamens kann „www.phpuser.com“ oder „.phpuser.com“ sein.

Der Wertteil in der SetCookie-Funktion wird bei der Übergabe automatisch codiert. Das heißt, wenn der Wert von value „Testwert“ ist, wird er bei der Übergabe zu „test%20value“, genau wie die Methode von URL . Dies ist für das Programm natürlich transparent, da PHP den Cookie-Wert beim Empfang automatisch dekodiert.

Wenn Sie mehrere Cookies mit demselben Namen setzen möchten, verwenden Sie ein Array. Die Methode ist:

SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");

oder

SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");

2. Cookies empfangen und verarbeiten

PHP bietet eine sehr gute Unterstützung für den Empfang und die Verarbeitung von Cookies ist völlig automatisch. Das gleiche Prinzip wie FORM-Variablen, sehr einfach.

Wenn Sie beispielsweise ein Cookie mit dem Namen MyCookie setzen, analysiert PHP es automatisch anhand des vom WEB-Server empfangenen HTTP-Headers und bildet eine Variable wie eine gewöhnliche Variable mit dem Namen $myCookie. Der Wert dieser Variablen ist der Wert des Cookies . . Dasselbe gilt auch für Arrays. Eine andere Möglichkeit besteht darin, auf das globale Variable-Array $HTTP_COOKIE_VARS von PHP zu verweisen.

Die Beispiele sind wie folgt: (vorausgesetzt, diese wurden auf den vorherigen Seiten festgelegt und sind noch gültig)

echo $MyCookie;
echo $CookieArray[0];
echo count($CookieArray);
echo $HTTP_COOKIE_VARS["MyCookie"];

So einfach ist das.

3. Cookie löschen

Um ein vorhandenes Cookie zu löschen, gibt es zwei Möglichkeiten:

Zuerst Rufen Sie SetCookie nur mit dem Namensparameter auf, dann wird das Cookie mit diesem Namen vom zugehörigen Computer gelöscht

Eine andere Möglichkeit ist Um die Cookie-Ablaufzeit auf time() oder time()-1 zu setzen, wird das Cookie nach dem Durchsuchen der Seite gelöscht (tatsächlich abgelaufen).

Es ist zu beachten, dass beim Löschen eines Cookies dessen Wert auf der aktuellen Seite weiterhin gültig ist.

4. Einschränkungen bei der Verwendung von Cookies

Erstens müssen diese festgelegt werden, bevor der Inhalt der HTML-Datei ausgegeben wird.

Zweitens gehen verschiedene Browser unterschiedlich mit Cookies um und es kann manchmal zu falschen Ergebnissen kommen. Beispiel: MS IE+SERVICE PACK 1 kann Cookies mit Domänennamen und Pfad nicht korrekt verarbeiten, Netscape Communicator 4.05 und MS IE 3.0 können Cookies ohne Pfad und Zeit nicht korrekt verarbeiten. MS IE 5 scheint Cookies mit Domänennamen, Pfad und Zeit nicht verarbeiten zu können. Das ist etwas, was ich beim Entwerfen der Seiten dieser Website entdeckt habe.

Die dritte Einschränkung liegt auf der Clientseite.

Die maximale Anzahl von Cookies, die ein Browser erstellen kann, beträgt 30, und jedes darf 4 KB nicht überschreiten. Die Gesamtzahl der Cookies, die von jeder WEB-Site gesetzt werden können, darf 20 nicht überschreiten.

PHP-METHODE ZUM LÖSCHEN VON COOKIE

首先我们看一下php手册中关于删除cookie的说明

------以下引用php手册内容--------------

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

要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。

下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除

例子

// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束--------------------------

删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这

也是几乎所有php程序员都会这么做。

后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试了一下

setcookie("testcookie", &#39;&#39;);
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源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕直接查源码)

以下代码可以在php5.20的Linux源码包中ext/standard/head.c第99行附近找到.

if (value && value_len == 0) {
/*
    * MSIE doesn&#39;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);

会发送删除cookie的http头给浏览器.

最后我们可以得出结论,在php中使用

setcookie($cookiename, &#39;&#39;);或者 setcookie($cookiename, NULL);

都会删除cookie,当然这些手册中并没有。

Das obige ist der detaillierte Inhalt vonSo löschen Sie Cookies in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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