Bagaimana untuk memadam kuki menggunakan php setcookie

藏色散人
Lepaskan: 2023-03-13 14:10:02
asal
2391 orang telah melayarinya

Cara memadam kuki dengan setcookie php: 1. Buat fail sampel PHP 2. Padam kuki melalui kaedah "setcookie("TestCookie", "", time() - 3600);"

Bagaimana untuk memadam kuki menggunakan php setcookie

Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3

Cara memadam kuki dengan php setcookie?

Penjelasan terperinci tentang cara memadam kuki dalam php:

Mari kita lihat dahulu mekanisme kuki yang berkaitan.

Kodnya adalah seperti berikut:

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
Salin selepas log masuk

Untuk memadamkan kuki, anda perlu memastikan bahawa tarikh tamat tempohnya adalah pada masa lalu untuk mencetuskan mekanisme pemadaman penyemak imbas.

Contoh berikut menggambarkan cara memadam kuki yang baru ditetapkan:

Kodnya adalah seperti berikut:

<?php
//将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>
Salin selepas log masuk

Cara untuk memadam kuki adalah dengan tetapkan tempoh sah kuki Tetapkan kepada masa semasa, yang dilakukan oleh hampir semua pengaturcara PHP.

Kemudian, seorang rakan yang baru menggunakan PHP memberitahu saya bahawa dia ingin menetapkan nilai kuki untuk dikosongkan dalam program, tetapi kuki itu telah dipadamkan terus. Reaksi pertama saya pada masa itu ialah saya tidak percaya, jadi saya menguji
:

Kodnya adalah seperti berikut:

setcookie("testcookie", &#39;&#39;);
print_r($_COOKIE);
Salin selepas log masuk

Hasilnya ialah keseluruhan tatasusunan $_COOKIE kosong , bukannya hanya $_COOKIE['testcookie'] kosong. Jadi saya menggunakan winsock untuk menangkap paket dan memerhatikan pengepala http yang dikembalikan saya mendapati bahawa pengepala http ternyata "Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT" , yang bermaksud "setcookie("testcookie ", '');" memang memadamkan cookie testcookie secara langsung, dan tiada penjelasan sama sekali dalam manual PHP tentang situasi ini.

Akhirnya baca kod sumber php dan akhirnya menemui kebenaran (ini adalah faedah sumber terbuka, jika ada apa-apa yang tidak jelas tentang cerita dalaman, semak kod sumber terus).

Kod berikut boleh didapati berhampiran baris 99 ext/standard/head.c dalam pakej sumber Linux php5.20:

Kodnya adalah seperti berikut:

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);
    }
}
Salin selepas log masuk

Kod sumber Ia memaparkan dengan jelas "jika (nilai && nilai_len == 0)". Apabila "value_len" ialah 0, "sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name dt );" akan menghantar pengepala http untuk memadamkan kuki ke penyemak imbas.

Akhirnya kita boleh membuat kesimpulan bahawa menggunakan "setcookie($cookiename, '');" atau "setcookie($cookiename, NULL);" dalam php akan memadamkan cookies, tetapi sudah tentu ia tidak ada dalam manual ini.

Bukankah ia sangat mudah. ​​Kadangkala kita masih perlu membaca kod sumber php dengan teliti.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk memadam kuki menggunakan php setcookie. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan