Bagaimana cara mendeteksi di server (sisi server) apakah cookie di browser dinonaktifkan? Apa itu mungkin?
Penjelasan mendetail: Saya sedang memproses permintaan HTTP di server. Saya ingin menyetel cookie melalui Set-Cookie
header. Saya perlu mengetahui pada saat itu apakah cookie akan disetel oleh browser klien atau permintaan saya untuk menyetel cookie akan diabaikan.
http
cookies
server-side
Alexander Yanovets
sumber
sumber
Jawaban:
Kirim tanggapan pengalihan dengan kumpulan cookie; saat memproses pengujian URL yang diarahkan ulang (khusus) untuk cookie - jika ada, alihkan ke pemrosesan normal, jika tidak, alihkan ke status kesalahan.
Perhatikan bahwa ini hanya memberi tahu Anda browser yang mengizinkan cookie disetel, tetapi tidak untuk berapa lama. FF saya memungkinkan saya untuk memaksa semua cookie ke mode "sesi", kecuali situs tersebut secara khusus ditambahkan ke daftar pengecualian - cookie tersebut akan dibuang ketika FF dimatikan terlepas dari kadaluwarsa yang ditentukan server. Dan ini adalah mode saya selalu menjalankan FF.
sumber
Anda dapat menggunakan Javascript untuk melakukannya
Perpustakaan:
function createCookie(name, value, days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else expires = ""; document.cookie = name + "=" + value + expires + "; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function eraseCookie(name) { createCookie(name, "", -1); } function areCookiesEnabled() { var r = false; createCookie("testing", "Hello", 1); if (readCookie("testing") != null) { r = true; eraseCookie("testing"); } return r; }
Kode untuk dijalankan:
Ingat
Ini hanya berfungsi jika Javascript diaktifkan!
sumber
Saya tidak berpikir ada cara langsung untuk memeriksanya. Cara terbaik adalah dengan menyimpan nilai dalam cookie dan mencoba membacanya dan memutuskan apakah cookie diaktifkan atau tidak.
sumber
Cara umum untuk memeriksa dukungan cookie adalah melalui pengalihan.
Sebaiknya lakukan ini hanya saat pengguna mencoba melakukan sesuatu yang memulai sesi, seperti masuk, atau menambahkan sesuatu ke keranjang mereka. Jika tidak, bergantung pada cara Anda menanganinya, Anda berpotensi memblokir akses ke seluruh situs Anda untuk pengguna - atau bot - yang tidak mendukung cookie.
Pertama, server memeriksa data login seperti biasa - jika data login salah, pengguna menerima umpan balik itu seperti biasa. Jika benar, maka server segera merespons dengan cookie dan pengalihan ke halaman yang dirancang untuk memeriksa cookie itu - yang mungkin saja URL yang sama tetapi dengan beberapa bendera yang ditambahkan ke string kueri. Jika halaman kedua itu tidak menerima cookie, maka pengguna menerima pesan yang menyatakan bahwa mereka tidak dapat masuk karena cookie dinonaktifkan di browser mereka.
Jika Anda sudah mengikuti pola Post-Redirect-Get untuk form login Anda, maka pengaturan dan pemeriksaan cookie ini tidak menambahkan permintaan tambahan - cookie dapat diatur selama pengalihan yang ada, dan diperiksa oleh tujuan yang memuat setelah pengalihan.
Sekarang mengapa saya hanya melakukan uji cookie setelah tindakan yang dimulai oleh pengguna selain pada setiap pemuatan halaman. Saya telah melihat situs menerapkan uji cookie pada setiap halaman, tidak menyadari bahwa ini akan berdampak pada hal-hal seperti mesin telusur yang mencoba merayapi situs tersebut. Artinya, jika pengguna mengaktifkan cookie, cookie pengujian disetel sekali, jadi mereka hanya perlu menahan pengalihan pada halaman pertama yang mereka minta dan sejak saat itu tidak ada pengalihan. Namun, untuk browser atau agen pengguna lainnya, seperti mesin telusur, yang tidak mengembalikan cookie, setiap halaman dapat dengan mudah menghasilkan pengalihan.
Metode lain untuk memeriksa dukungan cookie adalah dengan Javascript - dengan cara ini, pengalihan tidak diperlukan - Anda dapat menulis cookie dan membacanya kembali secara virtual untuk melihat apakah itu disimpan dan kemudian diambil kembali. Kelemahan dari ini adalah ini berjalan dalam skrip di sisi klien - yaitu jika Anda masih ingin pesan tentang apakah cookie didukung untuk kembali ke server, maka Anda masih harus mengaturnya - seperti dengan panggilan Ajax.
Untuk aplikasi saya sendiri, saya menerapkan beberapa perlindungan untuk serangan 'Login CSRF', varian dari serangan CSRF, dengan menyetel cookie yang berisi token acak di layar login sebelum pengguna login, dan memeriksa token tersebut saat pengguna mengirimkan login mereka detailnya. Baca lebih lanjut tentang Login CSRF dari Google. Efek sampingnya adalah saat mereka masuk, saya dapat memeriksa keberadaan cookie itu - pengalihan tambahan tidak diperlukan.
sumber
Biasanya, Anda mungkin hanya perlu memeriksa dukungan cookie setelah pengguna melakukan beberapa tindakan di situs, seperti mengirimkan formulir login, menambahkan item ke keranjang mereka, dan sebagainya.
Bagi saya saat ini, memeriksa dukungan cookie sejalan dengan pencegahan CSRF (Cross-Site Request Forgery).
Anda mungkin harus pergi ke tempat lain untuk membaca lebih lanjut tentang CSRF , tetapi gagasan di baliknya adalah bahwa situs lain dapat menipu atau pengguna Anda untuk mengirimkan bentuk tersembunyi pilihan mereka ke situs Anda sendiri. Cara mengatasinya adalah dengan menyetel cookie saat penonton melihat formulir, dan menyetel token yang cocok sebagai elemen formulir tersembunyi, lalu saat memproses formulir, periksa apakah cookie dan elemen formulir tersembunyi telah disetel dan cocok satu sama lain. Jika ini adalah percobaan serangan CSRF, situs tidak akan dapat menyediakan bidang tersembunyi untuk mencocokkan cookie pengguna, karena cookie pengguna tidak akan dapat dibaca oleh mereka di bawah kebijakan yang sama-asal.
Jika formulir dikirimkan tanpa cookie, tetapi berisi token yang tampak valid, Anda dapat menyimpulkan dari sini bahwa pengguna menonaktifkan cookie dan menampilkan pesan yang menunjukkan bahwa pengguna harus mengaktifkan cookie dan mencoba kembali. Kemungkinan lain, tentu saja, adalah bahwa pengguna tersebut adalah korban dari upaya serangan CSRF. Jadi memblokir pengguna ketika cookie tidak cocok juga akan memiliki efek samping mencegah serangan itu.
sumber
Saya selalu menggunakan ini:
Menurut w3schools "Properti cookieEnabled didukung di semua browser utama.".
Namun, ini berfungsi untuk saya ketika saya menggunakan formulir, di mana saya dapat menginstruksikan browser untuk mengirimkan informasi tambahan.
sumber
Cobalah untuk menyimpan sesuatu ke dalam kue, lalu bacalah. Jika Anda tidak mendapatkan apa yang Anda harapkan, cookie mungkin dinonaktifkan.
sumber
periksa kode ini, itu akan membantu Anda.
sumber
Pertanyaan apakah cookie "diaktifkan" terlalu boolean. Browser saya (Opera) memiliki pengaturan cookie per situs. Lebih jauh, pengaturan itu bukan ya / tidak. Bentuk yang paling berguna sebenarnya adalah "hanya sesi", mengabaikan tanggal kedaluwarsa server. Jika Anda mengujinya langsung setelah pengaturan, itu akan ada di sana. Besok, tidak akan.
Selain itu, karena ini adalah pengaturan yang dapat Anda ubah, bahkan pengujian apakah cookie tetap hanya memberi tahu Anda tentang pengaturan saat Anda menguji . Saya mungkin telah memutuskan untuk menerima satu cookie itu, secara manual. Jika saya terus menerima spam, saya dapat (dan terkadang, akan) mematikan cookie untuk situs itu.
sumber
Jika Anda hanya ingin memeriksa apakah cookie sesi (cookie yang ada selama sesi tersebut) diaktifkan, setel mode sesi Anda ke AutoDetect di file web.config Anda, maka kerangka Asp.Net akan menulis cookie ke browser klien disebut AspxAutoDetectCookieSupport . Anda kemudian dapat mencari cookie ini di koleksi Request.Cookies untuk memeriksa apakah cookie sesi diaktifkan pada klien.
Misalnya di set file web.config Anda:
Kemudian periksa apakah cookie diaktifkan pada klien dengan:
Catatan kecil: Secara default, ini disetel ke UseDeviceProfile, yang akan mencoba menulis cookie ke klien selama klien mendukungnya , meskipun cookie dinonaktifkan. Saya merasa agak aneh bahwa ini adalah opsi default karena tampaknya tidak ada gunanya - sesi tidak akan berfungsi dengan cookie yang dinonaktifkan di browser klien dengan itu disetel ke UseDeviceProfile, dan jika Anda mendukung mode tanpa cookie untuk klien yang tidak mendukung cookie , lalu mengapa tidak menggunakan Deteksi Otomatis dan mendukung mode tanpa cookie untuk klien yang menonaktifkannya ...
sumber
Saya menggunakan versi jawaban "balexandre" yang jauh lebih sederhana di atas. Ini mencoba untuk mengatur, dan membaca cookie sesi untuk tujuan menentukan apakah cookie diaktifkan. Dan ya, ini mengharuskan JavaScript diaktifkan juga. Jadi, Anda mungkin ingin tag di sana jika Anda ingin memilikinya.
sumber
NodeJS - Sisi Server - Cookie Check Redirect Middleware - Express Session / Cookie Parser
Dependensi
Middleware
sumber
The
cookieEnabled
properti mengembalikan nilai Boolean yang menentukan apakah atau tidak cookie diaktifkan di browsersumber
Gunakan navigator.CookieEnabled untuk cookie diaktifkan (ini akan mengembalikan true dari false) dan noscript tag Html. Omong-omong navigator.cookieEnabled adalah javascript jadi jangan mengetiknya sebagai HTML
sumber
sumber