Saya perlu mendapatkan semua cookie dari browser

106

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

informatik01
sumber
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"
aemkei
sumber
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 .
Franci Penov
sumber
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.

PhiLho
sumber
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.

Codeslayer
sumber
4

Pendekatan modern.

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

console.log(c);

;)

Samvel prabu
sumber
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.

ZXX
sumber
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]}), {});
Netanel R
sumber
0

Apa yang Anda minta itu mungkin; tapi itu hanya akan bekerja di browser tertentu. Anda harus mengembangkan aplikasi ekstensi browser untuk mencapai ini. Anda dapat membaca lebih lanjut tentang api chrome untuk memahami lebih baik. https://developer.chrome.com/extensions/cookies

Emeka Augustine
sumber