Anda dapat menemukan $cookie->delete()dari github.com/delight-im/PHP-Cookie bermanfaat. Kode dari pertanyaan hanya menghapus properti yang telah diuraikan di sisi server. Cookie akan tetap hidup di sisi klien.
Saya mengerti bahwa ini adalah contoh, tapi tolong jangan pernah menyimpan nama pengguna atau kata sandi di cookie.
tamasd
3
Tidak ada gunanya untuk unset($_COOKIE['Hello']);. Itu tidak mengubah apa pun jika Anda menghapusnya.
machineaddict
30
@machineaddict unset($_COOKIE['Hello']);sebenarnya penting jika Anda dapat memeriksa cookie di suatu tempat nanti dalam kode.
Andreas Hultgren
4
berfungsi dengan baik tetapi ketika mencoba memuat ulang halaman. melihat cookie diatur dengan data lama mengapa?
Nilesh patel
9
======= TIDAK BEKERJA DI CHROME ======= Saya mencoba kode ini hari ini dan ketika saya mengakses situs menggunakan google chrome, dan kemudian masuk ke alat pengembang di chrome, saya dapat melihat bahwa waktu kedaluwarsa diatur ke 1 detik sebelum zaman (mis. 1969-12-31 23:59:59) namun ketika saya mengirimkan halaman selanjutnya cookie dikirimkan ke server. Ketika saya mengubah -1 ke 1 (mis. 1970-01-01 00:00:01) untuk memberikan perintah berikut: setcookie ('Hello', null, 1, '/'); kemudian chrome bertindak seperti yang diharapkan dan tidak mengirimkan cookie
Peter Hinds
284
Tetapkan nilai ke "" dan tanggal kedaluwarsa menjadi kemarin (atau tanggal apa pun di masa lalu)
setcookie("hello","", time()-3600);
Maka cookie akan kedaluwarsa saat halaman berikutnya dimuat.
Jika Anda menaruh tanggal terlalu jauh di masa lalu, IE akan menggonggong dan mengabaikannya, artinya nilainya tidak akan dihapus.
Julien
52
@strager Status manual : Jika diatur ke 0, atau dihilangkan, cookie akan kedaluwarsa pada akhir sesi (ketika browser ditutup). Itu tidak benar-benar menghapus cookie. Saya benar-benar tidak tahu apakah IE akan melakukan apa yang dikatakan Julien, tetapi mungkin IE akan melakukan sesuatu yang aneh.
yannis
31
Juga, jangan lupa untuk benar-benar tidak disetel ($ _ COOKIE ["halo"]) juga, karena jika ada kode pada halaman lainnya yang terlihat pada $ _COOKIE ["halo"], ia masih akan menemukan pengaturannya. Saya baru saja mendapatkan yang ini.
Magmatik
12
Plus itu ide yang baik untuk mengatur jalur, jadi setcookie ('halo', '', waktu () - 3600, '/');
Stephan Weinhold
227
Cara bersih untuk menghapus cookie adalah dengan menghapus $_COOKIEnilai dan file cookie browser:
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
Ini adalah metode terbaik, karena Anda tidak perlu me-refresh halaman!
Maks.
19
Saya terus menelusuri halaman dan jawabannya terus menjadi lebih baik, lucu. Tapi ini yang terbaik, berhentilah mencari di sini.
Andrew
23
FYI, jika Anda mengatur cookie menggunakan jalur, Anda harus menyertakan jalur dalam setcookiepanggilan ini juga:setcookie('key', '', time() - 3600, '/');
Gavin
1
@ Gavin Terima kasih atas tipnya. Saya bertanya-tanya mengapa itu tidak dihapus, tetapi unsettingberhasil.
stinkysGTI
1
Untuk siapa pun yang memeriksa keberadaan cookie dan peduli tentang cookie yang ada dengan nullnilai, Anda harus menggunakan array_key_exists () , karena cookie dengan nullnilai tidak akan ditemukan oleh isset()cek.
Leith
27
Untuk menghapus cookie dengan andal, itu tidak cukup untuk mengaturnya agar kadaluwarsa di masa lalu, seperti yang dihitung oleh server PHP Anda. Ini karena komputer klien dapat dan seringkali memiliki waktu yang berbeda dari server Anda.
Praktik terbaik adalah menimpa cookie saat ini dengan cookie kosong yang kedaluwarsa satu detik di masa mendatang setelah zaman (1 Januari 1970 00:00:00 UTC), seperti:
Koreksi saya jika saya salah, tetapi menetapkan bahwa ke "1" akan menetapkannya menjadi satu detik setelah zaman, bukan satu detik di masa depan ..? Saya percaya Anda benar tentang perbedaan zona waktu, jadi solusi terbaik adalah mengaturnya menjadi 2 hari di masa lalu (jadi bahkan zona waktu terjauh pun masih belum mengatur cookie).
PaulSkinner
@PaulSkinner tanggal zaman tidak tergantung pada zona waktu, komputer melakukan perhitungan itu untuk Anda.
AlexR
3
@AlexR Ya. Tidak benar-benar menjawab maksud saya. Untuk pemahaman saya, kode di atas memang mengatur cookie untuk kedaluwarsa di masa lalu (satu detik melewati zaman), kecuali saya salah.
PaulSkinner
@PaulSkinner tentu saja, sisa komentar Anda baik-baik saja.
AlexR
9
+1 untuk "1". Saya tidak mengerti mengapa semua orang lain begitu terpaku pada pengaturan cookie yang dihapus tepat satu jam di masa lalu.
Meisner
20
Itu akan menghapus cookie dalam kode Anda, tetapi karena variabel $ _COOKIE di-refresh pada setiap permintaan, itu hanya akan kembali pada permintaan halaman berikutnya.
Untuk benar-benar menyingkirkan cookie, tetapkan tanggal kedaluwarsa di masa lalu:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
@PratikCJoshi Hanya jika kode Anda mencarinya nanti.
AlphaMycelium
14
Saya memiliki masalah yang sama dalam kode saya dan menemukan bahwa itu adalah masalah jalur cookie. Lihat posting stack overflow ini: Tidak dapat menghapus set cookie php
Saya telah menetapkan cookie menggunakan nilai jalur "/", tetapi tidak memiliki nilai jalur ketika saya mencoba untuk menghapusnya, jadi itu tidak jelas. Jadi di sini adalah contoh dari apa yang berhasil:
Pengaturan cookie:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Lihat sampel berlabel " Contoh # 2 setcookie () hapus contoh " dari dokumen PHP. Untuk menghapus cookie dari browser, Anda harus memberi tahu browser bahwa cookie telah kedaluwarsa ... browser kemudian akan menghapusnya. unsetkarena Anda telah menggunakannya, hanya menghapus cookie 'halo' dari array COOKIE.
Untuk menghapus cookie, Anda hanya perlu mengatur nilai ke NULL:
"Jika Anda menetapkan cookie dengan nilai tidak cacat untuk waktu, jalur, atau domain kedaluwarsa, Anda harus memberikan nilai-nilai yang sama lagi ketika Anda menghapus cookie agar cookie dihapus dengan benar." Kutipan dari buku "Belajar PHP5".
Jadi kode ini harus bekerja (berfungsi untuk saya):
Itu bisa diandalkan, itu sebabnya. Kombinasi pengaturan nilai ke nol dan waktu di masa lalu (tapi tidak terlalu jauh seperti IE kadang-kadang tidak suka terlalu jauh dari apa yang saya baca) bekerja di seluruh papan.
PaulSkinner
String kosong ''bukanlah hal yang sama dengan null.
orev
3
Untuk menghapus semua cookie, Anda dapat menulis:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
Saya tahu bahwa sudah lama sejak topik ini dibuat, tetapi saya melihat sedikit kesalahan dalam solusi ini (saya bisa menyebutnya seperti itu, karena ini detail). Saya setuju bahwa solusi yang lebih baik mungkin adalah solusi ini:
Tetapi, dalam kasus ini, Anda menghapus cookie di setiap kasus di mana fungsi yang tidak disetel bekerja dan segera Anda membuat cookie yang kadaluwarsa jika fungsi yang tidak disetel tidak berfungsi.
Itu berarti bahwa meskipun fungsi yang tidak disetel bekerja, masih ada 2 cookie di komputer. Tujuan yang diminta, dalam sudut pandang logis, adalah untuk menghapus cookie jika memungkinkan dan jika sebenarnya tidak, buatlah itu kedaluwarsa; untuk mendapatkan hasil "terbersih".
Fungsi tidak disetel dimaksudkan untuk logika PHP (jika Anda ingin menggunakan variabel $ _COOKIE ['Halo'], Anda tidak bisa karena tidak disetel). Dan fungsi setcookie dimaksudkan untuk navigator. 2 tujuan berbeda, urutan fungsi tidak berdampak pada kode aktual.
Kalzem
Sebenarnya, saya mengetahuinya, tetapi jika Anda benar-benar ingin memastikan bahwa kuki telah disetel / dihapus dan jadi Anda menggunakan dua solusi di atas, akan lebih bersih untuk sebelum membuat tesis kedaluwarsa dan kemudian mengeset tesis daripada mengeset tesis dan lalu buat ulang cookie yang kedaluwarsa ... jika Anda mengerti maksud saya?
Greg
Yap, maaf baru saja menjawab :) Saya sudah mengirimnya karena saya pernah melihat orang melakukannya dengan cara lain .. tapi sepertinya lebih pintar seperti itu, saya pikir.
Greg
2
$cookie_name ="my cookie";
$cookie_value ="my value";
$cookie_new_value ="my new value";// Create a cookie,
setcookie($cookie_name, $cookie_value , time()+(86400*30),"/");//86400 = 24 hours in seconds// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time()+(86400*30),"/");// Delete a cookie,
setcookie($cookie_name,'', time()-3600,"/");// time() - 3600 means, set the cookie expiration date to the past hour.
Kode ini akan menghapus variabel cookie sepenuhnya dari semua domain Anda yaitu; "/" - ini menunjukkan bahwa nilai variabel cookie siap untuk semua domain, bukan hanya untuk domain atau jalur saat ini. time () - 300 menunjukkan bahwa ia diset ke waktu sebelumnya sehingga akan kedaluwarsa.
Anda bisa mengatur variabel sesi berdasarkan nilai cookie
session_start();if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin']=="true")){
$_SESSION['loggedin']="true";}
echo ($_SESSION['loggedin']=="true"?"You are logged in":"Please Login to continue");
function unset_cookie($cookie_name){if(isset($_COOKIE[$cookie_name])){
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name,null,-1);}else{returnfalse;}}
Jika Anda ingin menghapus $ _COOKIE ['user_account'].
Cukup gunakan:
Tidak. Hanya membaca dokumen. "Jika diatur ke 0, atau dihilangkan, cookie akan kedaluwarsa pada akhir sesi (ketika browser ditutup)."
DrLightman
@DrLightman Terima kasih atas kehadiran Anda, bisakah Anda mengutip dokumentasi?
Amir Fo
function.setcookie.php , kedaluwarsa parameter. "Jika diatur ke 0, atau dihilangkan, cookie akan kedaluwarsa pada akhir sesi (ketika browser ditutup)."
Anda harus menghapus cookie dengan php di server Anda dan juga dengan js untuk browser Anda .. (Mereka telah dibuat dengan php, tetapi file cookie juga ada di klien browser):
Sebuah contoh:
if($_GET['action']=='exit'){// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Parameter domain akan berarti domain saat ini jika dihilangkan.
DustWolf
Saya bermaksud mengatakan bahwa jawaban Anda salah. Ini akan berfungsi untuk domain apa pun, bukan hanya mesin lokal, karena akan secara otomatis menggunakan domain saat ini. Dan komentar Anda berarti mengatakan Anda tersinggung atau semacamnya?
DustWolf
Apakah Anda bahkan membaca teks yang ada di atas kode? berhenti menggangguku, aku sedang bekerja. saya selesai berbicara dengan kamu.
Peter Gruppelaar
Saya tidak mengerti mengapa Anda merasa jengkel pada pengguna lain jika mereka menunjukkan kesalahan dalam jawaban Anda. setcookieberfungsi untuk domain apa pun, baik localhost atau tidak.
xorinzor
Jadi jika semua orang mengatakan, itu yang terjadi ... maka pasti ada sesuatu yang salah dengan jawaban saya ... topi pertama yang ditunjukkan di pos ini tidak masalah? ... Anda hanya ingin semacam jawaban arah , dan abaikan setiap pengguna global yang bekerja pada situasi simular ... saya mengerti ... berhenti menggangguku, jawaban saya tidak salah.
$cookie->delete()
dari github.com/delight-im/PHP-Cookie bermanfaat. Kode dari pertanyaan hanya menghapus properti yang telah diuraikan di sisi server. Cookie akan tetap hidup di sisi klien.Jawaban:
Anda Mungkin Coba ini
sumber
unset($_COOKIE['Hello']);
. Itu tidak mengubah apa pun jika Anda menghapusnya.unset($_COOKIE['Hello']);
sebenarnya penting jika Anda dapat memeriksa cookie di suatu tempat nanti dalam kode.Tetapkan nilai ke "" dan tanggal kedaluwarsa menjadi kemarin (atau tanggal apa pun di masa lalu)
Maka cookie akan kedaluwarsa saat halaman berikutnya dimuat.
sumber
Cara bersih untuk menghapus cookie adalah dengan menghapus
$_COOKIE
nilai dan file cookie browser:sumber
setcookie
panggilan ini juga:setcookie('key', '', time() - 3600, '/');
unsetting
berhasil.null
nilai, Anda harus menggunakan array_key_exists () , karena cookie dengannull
nilai tidak akan ditemukan olehisset()
cek.Untuk menghapus cookie dengan andal, itu tidak cukup untuk mengaturnya agar kadaluwarsa di masa lalu, seperti yang dihitung oleh server PHP Anda. Ini karena komputer klien dapat dan seringkali memiliki waktu yang berbeda dari server Anda.
Praktik terbaik adalah menimpa cookie saat ini dengan cookie kosong yang kedaluwarsa satu detik
di masa mendatangsetelah zaman (1 Januari 1970 00:00:00 UTC), seperti:sumber
Itu akan menghapus cookie dalam kode Anda, tetapi karena variabel $ _COOKIE di-refresh pada setiap permintaan, itu hanya akan kembali pada permintaan halaman berikutnya.
Untuk benar-benar menyingkirkan cookie, tetapkan tanggal kedaluwarsa di masa lalu:
sumber
unset()
cookie?Saya memiliki masalah yang sama dalam kode saya dan menemukan bahwa itu adalah masalah jalur cookie. Lihat posting stack overflow ini: Tidak dapat menghapus set cookie php
Saya telah menetapkan cookie menggunakan nilai jalur "/", tetapi tidak memiliki nilai jalur ketika saya mencoba untuk menghapusnya, jadi itu tidak jelas. Jadi di sini adalah contoh dari apa yang berhasil:
Pengaturan cookie:
Menghapus cookie:
Semoga itu bisa membantu.
sumber
Jika Anda mengatur cookie agar kedaluwarsa di masa lalu, browser akan menghapusnya. Lihat contoh hapus setcookie () di php.net
sumber
Lihat sampel berlabel " Contoh # 2 setcookie () hapus contoh " dari dokumen PHP. Untuk menghapus cookie dari browser, Anda harus memberi tahu browser bahwa cookie telah kedaluwarsa ... browser kemudian akan menghapusnya.
unset
karena Anda telah menggunakannya, hanya menghapus cookie 'halo' dari array COOKIE.sumber
Ini adalah cara kerja kode PHP v7 setcookie () saat Anda melakukannya:
Dari output tcpdump saat mengendus port 80, server mengirim ke HTTP header berikut:
Mengamati paket dalam permintaan berikut ini Browser tidak lagi mengirim cookie ini di header
sumber
Untuk menghapus cookie, Anda hanya perlu mengatur nilai ke NULL:
"Jika Anda menetapkan cookie dengan nilai tidak cacat untuk waktu, jalur, atau domain kedaluwarsa, Anda harus memberikan nilai-nilai yang sama lagi ketika Anda menghapus cookie agar cookie dihapus dengan benar." Kutipan dari buku "Belajar PHP5".
Jadi kode ini harus bekerja (berfungsi untuk saya):
Pengaturan cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Menghapus cookie:
setcookie('foo', '', time() + 60 * 5);
Tetapi saya perhatikan bahwa semua orang menetapkan tanggal kedaluwarsa ke masa lalu, apakah itu perlu, dan mengapa?
sumber
''
bukanlah hal yang sama dengannull
.Untuk menghapus semua cookie, Anda dapat menulis:
sumber
Cukup atur tanggal kedaluwarsa ke satu jam yang lalu, jika Anda ingin "menghapus" cookie, seperti ini:
atau
Sumber: http://www.php.net/manual/en/function.setcookie.php
Anda harus menggunakan
filter_input()
fungsi untuk semua global yang dapat dimasukkan / dimanipulasi pengunjung, seperti ini:Anda dapat membaca lebih lanjut tentang ini di sini: http://www.php.net/manual/en/function.filter-input.php dan di sini: http://www.w3schools.com/php/func_filter_input.asp
sumber
Saya tahu bahwa sudah lama sejak topik ini dibuat, tetapi saya melihat sedikit kesalahan dalam solusi ini (saya bisa menyebutnya seperti itu, karena ini detail). Saya setuju bahwa solusi yang lebih baik mungkin adalah solusi ini:
Tetapi, dalam kasus ini, Anda menghapus cookie di setiap kasus di mana fungsi yang tidak disetel bekerja dan segera Anda membuat cookie yang kadaluwarsa jika fungsi yang tidak disetel tidak berfungsi.
Itu berarti bahwa meskipun fungsi yang tidak disetel bekerja, masih ada 2 cookie di komputer. Tujuan yang diminta, dalam sudut pandang logis, adalah untuk menghapus cookie jika memungkinkan dan jika sebenarnya tidak, buatlah itu kedaluwarsa; untuk mendapatkan hasil "terbersih".
Jadi, saya pikir sebaiknya kita lakukan:
Terima kasih dan semoga harimu menyenangkan :)
sumber
sumber
Jika Anda ingin menghapus cookie sepenuhnya dari semua domain Anda saat ini maka kode berikut pasti akan membantu Anda.
Kode ini akan menghapus variabel cookie sepenuhnya dari semua domain Anda yaitu; "/" - ini menunjukkan bahwa nilai variabel cookie siap untuk semua domain, bukan hanya untuk domain atau jalur saat ini. time () - 300 menunjukkan bahwa ia diset ke waktu sebelumnya sehingga akan kedaluwarsa.
Itulah cara itu dihapus dengan sempurna.
sumber
Anda bisa mengatur variabel sesi berdasarkan nilai cookie
sumber
Anda cukup menggunakan fungsi penyesuaian ini:
Jika Anda ingin menghapus $ _COOKIE ['user_account'].
Cukup gunakan:
sumber
Itu mudah!
sumber
Ketika Anda memasukkan
0
waktu, maksud Anda "sekarang" (+ 0 dari sekarang sebenarnya sekarang) untuk browser dan menghapus cookie.Saya memeriksanya di browser chrome yang memberi saya:
sumber
Cukup atur nilai cookie
false
untuk menghapusnya,PS: - Itu cara termudah untuk melakukannya.
sumber
Anda harus menghapus cookie dengan php di server Anda dan juga dengan js untuk browser Anda .. (Mereka telah dibuat dengan php, tetapi file cookie juga ada di klien browser):
Sebuah contoh:
sumber
Sebagian besar dari Anda lupa bahwa ini hanya akan bekerja pada mesin lokal. Pada domain Anda akan membutuhkan pola seperti contoh ini.
sumber
setcookie
berfungsi untuk domain apa pun, baik localhost atau tidak.