Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memadam kuki menggunakan php setcookie

Bagaimana untuk memadam kuki menggunakan php setcookie

藏色散人
藏色散人asal
2021-10-27 10:02:202401semak imbas

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]]]]] )

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);
?>

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);

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);
    }
}

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!

Kenyataan:
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