Saya perlu mendapatkan semua cookie dari browser


106

Saya perlu menyimpan semua cookie di browser saya menggunakan JavaScript. Bagaimana caranya?


5
nayagi, sayangnya jika kami menjawab pertanyaan Anda, Anda akan memiliki perangkat lunak yang tidak lain adalah MALWARE.
Jon Limjap

19
@ Jon Limjap - itu tidak sepenuhnya benar. Ada skenario yang sah untuk dapat menghitung melalui semua cookie di browser web tanpa malware.
Franci Penov

Wah, tunggu sebentar. Semua cookie? Masuk dari situs web mana pun? Itu malware ...
alexyorke

Saya memiliki situasi (aplikasi web di belakang firewall untuk bisnis) di mana melakukan ini akan berguna dan cukup sah. Namun, masalah muncul karena kami memiliki terlalu banyak domain internal (kebanyakan melalui host virtual) sehingga orang dapat berargumen bahwa solusinya adalah menggunakan Sistem Masuk Tunggal.
ClubbedAce

Jawaban:


84

Anda hanya dapat mengakses cookie untuk situs tertentu. Menggunakan document.cookieAnda akan mendapatkan daftar pasangan kunci = nilai yang dipisahkan dengan titik koma.

secret=do%20not%20tell%you;last_visit=1225445171794

Untuk menyederhanakan akses, Anda harus mengurai string dan membatalkan semua entri:

var getCookies = function(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}

Jadi nanti Anda bisa menulis:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

5
ini tidak menangkap spasi setelah titik koma (";") jadi kunci memiliki spasi di depan ... use /; ? / saat membelah untuk menghapusnya?
Carter Cole

Periksa potongan ini untuk parsing document.cookies(dari buku O'Reilly).
Bentley4

harus benar-benar menambahkan .trim () untuk memasangkan [0] untuk memastikan bahwa tidak ada spasi di depan.
Andrew Killen

37
  1. Anda tidak dapat melihat cookie untuk situs lain.
  2. Anda tidak dapat melihat HttpOnlycookie.
  3. Semua cookie yang dapat Anda lihat ada di document.cookieproperti, yang berisi daftar pasangan yang dipisahkan titik komaname=value .

27

Kamu tidak bisa. Secara desain, untuk tujuan keamanan, Anda hanya dapat mengakses cookie yang ditetapkan oleh situs Anda. StackOverflow tidak dapat melihat cookie yang ditetapkan oleh UserVoice maupun yang ditetapkan oleh Amazon.


5
bagaimana facebook melakukan itu ...? Saya selalu melihat facebook menampilkan iklan yang berhubungan dengan apa yang saya lihat dari google!
Ari

16
Sebenarnya, Facebook menanam cookie-nya sendiri di setiap situs ... menggunakan tombol Suka. Saya yakin Google melakukan hal yang sama pada tombol +1 atau bahkan pada skrip statistik situs.
PhiLho

1
terima kasih ..., ini membuka mataku. Saya pikir semua jenis aplikasi yang terkait dengannya akan dilakukan, termasuk masuk menggunakan aplikasi akun media sosial.
Ari

2
@SoursopTree - Bukankah AdChoices? Facebook menggunakan AdChoices, yaitu layanan Google yang menampilkan konten berdasarkan pencarian Anda melalui Google. Stackoverflow juga menggunakan AdChoices. Saya mungkin sedikit kurang detail - tapi saya rasa itulah yang Anda pikirkan.
Rik

1
@KeepMove kami menyebut terminologi ini sebagai sinkronisasi cookie
ericdemo07

12

Untuk mengambil semua cookie untuk dokumen saat ini yang dibuka di browser, Anda kembali menggunakan document.cookieproperti.


4

Pendekatan modern.

let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});

console.log(c);

;)


2

Karena judul tidak menentukan bahwa itu harus terprogram, saya akan berasumsi bahwa itu adalah masalah debugging / manajemen privasi asli dan solusinya bergantung pada browser dan memerlukan browser dengan tol manajemen cookie mendetail dan / atau modul debugging atau sebuah plugin / ekstensi. Saya akan membuat daftar satu dan meminta orang lain untuk menulis di browser yang mereka ketahui secara rinci dan harap akurat dengan versinya.

Chromium, Besi build (SRWare Iron 4.0.280)

Menu perkakas (alat): Opsi / Di Balik Terpal / [Tampilkan kuki dan izin situs web] Untuk domain / situs terkait ketikkan sufiks ke dalam kotak telusur (seperti .foo.tv). Peringatan: ketika Anda memiliki node (situs atau cookie) yang disorot klik hanya gunakan [Hapus] untuk mematikan subpohon tertentu. Menggunakan [Hapus Semua] akan tetap menghapus cookie untuk semua situs yang dipilih oleh pencarian dan menyia-nyiakan sesi debugging Anda.


1

Menambahkan trim () ke kunci dalam objek, dan beri nama str, sehingga akan lebih jelas bahwa kita berurusan dengan string di sini.

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.