1. Kata Pengantar
Sebelum ini, apabila menggunakan kuki, semuanya dikendalikan dalam bentuk document.cookie Walaupun keserasian baik, ia menyusahkan. Saya secara peribadi suka membina roda, jadi saya merangkum kelas alat untuk kuki. Untuk masa yang lama, saya suka menulis kod, tetapi saya tidak begitu suka ringkasan teks, dan saya juga tidak suka menulis perkara yang berpecah-belah Nampaknya saya perlu mengubahnya.
2. Idea
(1) Cara merangkum dan bentuk apa yang hendak dikapsulkan
Cara merangkum: Gunakan js asli untuk merangkumnya ke dalam alat, supaya ia boleh digunakan di mana-mana sahaja. Mengekapsulkan document.cookie ialah cara terbaik dan semua operasi adalah berdasarkan document.cookie.
Cara merangkumnya: Ia boleh wujud dalam bentuk objek dan boleh dilaksanakan menggunakan kaedah getter & setter.
(2) Kaedah manakah yang terkandung
get(), set(name, value, opts), remove(name), clear(), getCookies(), dsb. Saya secara peribadi berpendapat bahawa merangkum begitu banyak kaedah sudah cukup untuk menggunakan kuki.
3. Tindakan
(1) Fahami kuki Intipati kuki ialah kuki HTTP Objek yang dipaparkan pada klien ialah document.cookie Untuk maklumat lanjut, anda boleh membaca kod saya di bawah dan mengulas
(2) Kod atas: Kod ini hendaklah sangat intuitif dan boleh dimampatkan bersama kod projek. Saya rasa komen pembukaan di bawah adalah perkara utama.
/*
* Kuki HTTP: menyimpan maklumat sesi
* Nama dan nilai mesti dikodkan RUL apabila dihantar
* Kuki terikat pada nama domain yang ditentukan Kuki tidak boleh dikongsi dengan domain bukan tempatan, tetapi kuki boleh dikongsi dari tapak utama ke sub-tapak
* Kuki mempunyai beberapa sekatan: contohnya, IE6 & IE6- terhad kepada 20 IE7 50... jadi kuki biasanya ditetapkan mengikut keperluan
* Nama kuki tidak sensitif huruf besar dan kecil; ia juga disyorkan untuk mengekod URL kuki adalah cara yang baik untuk membezakan penghantaran kuki dalam keadaan yang berbeza dengan kuki tanda keselamatan
* Dalam kes SSL, ia dihantar ke pelayan, tetapi tidak dalam http. Adalah disyorkan untuk menetapkan tamat tempoh, domain dan laluan untuk kuki; setiap kuki hendaklah kurang daripada 4KB
* */
//Encapsulate cookies menggunakan kaedah getter dan setter
(fungsi(global){
//Dapatkan objek kuki, dinyatakan sebagai objek
Fungsi getCookiesObj(){
var cookies = {};
Jika(document.cookie){
var objs = document.cookie.split('; ');
untuk(var i dalam objs){
var index = objs[i].indexOf('='),
nama = objs[i].substr(0, indeks),
nilai = objs[i].substr(indeks 1, objs[i].panjang);
kuki[nama] = nilai;
}
}
pulangkan kuki;
}
//Tetapkan kuki
Set fungsi(nama, nilai, pilihan){
//memilih maxAge, laluan, domain, selamat
Jika(nama && nilai){
var cookie = encodeURIComponent(name) '=' encodeURIComponent(value);
//Parameter pilihan
jika (pilihan){
Jika(opts.maxAge){
Cookie = '; max-age=' opts.maxAge
}
Jika(opts.path){
Kuki = '; path=' opts.path;
}
Jika(opts.domain){
Kuki = '; domain=' opts.domain;
}
Jika(opts.secure){
kuki = 'selamat';
}
}
document.cookie = cookie;
pulangkan kuki;
}lain{
kembali '';
}
}
//Dapatkan kuki
Fungsi dapatkan(nama){
kembalikan decodeURIComponent(getCookiesObj()[nama]) || null;
}
//Kosongkan kuki
Fungsi alih keluar(nama){
if(getCookiesObj()[name]){
document.cookie = nama '=; umur maks=0';
}
}
//清除所有kuki
fungsi clear(){
var cookies = getCookiesObj();
untuk(kunci var dalam kuki){
document.cookie = kunci '=; umur maks=0';
}
}
//获取所有kuki
fungsi getCookies(nama){
kembalikan getCookiesObj();
}
//解决冲突
fungsi noConflict(nama){
if(nama && jenis nama === 'rentetan'){
if(nama && tetingkap['kuki']){
tetingkap[nama] = tetingkap['kuki'];
padamkan tetingkap['kuki'];
tetingkap kembali [nama];
}
}lain{
tetingkap kembali ['kuki'];
padamkan tetingkap['kuki'];
}
}
global['kuki'] = {
'getCookies': getCookies,
'set': set,
'dapat': dapatkan,
'alih keluar': alih keluar,
'jelas': jelas,
'tiadaKonflik': tiadaKonflik
};
})(tetingkap);
(3)contoh
Cookie-Beispiel