Tôi cần lấy tất cả cookie từ trình duyệt


105

Tôi cần lấy tất cả cookie được lưu trữ trong trình duyệt của mình bằng JavaScript. Nó được hoàn thiện bằng cách nào?


5
nayagi, rất tiếc nếu chúng tôi trả lời câu hỏi của bạn, bạn sẽ có phần mềm không kém gì MALWARE.
Jon Limjap

18
@Jon Limjap - điều đó không hoàn toàn đúng. Có những trường hợp hợp pháp để có thể liệt kê qua tất cả cookie trong trình duyệt web mà không bị phần mềm độc hại.
Franci Penov, 31/10/08

Chờ một chút. Tất cả các cookie? Đăng nhập từ bất kỳ trang web nào? Đó là phần mềm độc hại ...
alexyorke

Tôi có một tình huống (các ứng dụng web đằng sau tường lửa cho một doanh nghiệp) nơi làm điều này sẽ hữu ích và khá hợp pháp. Tuy nhiên, vấn đề tồn tại là do chúng ta có quá nhiều tên miền nội bộ (chủ yếu thông qua máy chủ ảo) nên người ta có thể tranh luận rằng giải pháp là sử dụng Đăng nhập một lần.
Clubbed

Câu trả lời:


83

Bạn chỉ có thể truy cập cookie cho một trang web cụ thể. Sử dụng, document.cookiebạn sẽ nhận được danh sách các cặp khóa = giá trị thoát được phân tách bằng dấu chấm phẩy.

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

Để đơn giản hóa việc truy cập, bạn phải phân tích cú pháp chuỗi và unescape tất cả các mục nhập:

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;
}

Vì vậy, sau này bạn có thể viết:

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

5
điều này không bắt khoảng trắng sau dấu chấm phẩy (";") nên các phím có khoảng trắng ở phía trước ... use /; ? / khi tách để loại bỏ chúng?
Carter Cole

Kiểm tra đoạn mã này để phân tích cú pháp document.cookies(từ cuốn sách của O'Reilly).
Bentley

thực sự nên thêm .trim () vào cặp [0] để đảm bảo rằng không có khoảng trắng ở đầu.
Andrew Killen

37
  1. Bạn không thể thấy cookie cho các trang web khác.
  2. Bạn không thể thấy HttpOnlycookie.
  3. Tất cả các cookie bạn có thể thấy đều nằm trong thuộc document.cookietính, chứa danh sách các cặp được phân tách bằng dấu chấm phẩyname=value .

27

Bạn không thể. Theo thiết kế, vì mục đích bảo mật, bạn chỉ có thể truy cập các cookie do trang web của bạn thiết lập. StackOverflow không thể thấy các cookie do UserVoice đặt hoặc do Amazon đặt.


5
facebook đã làm điều đó như thế nào ...? Tôi luôn thấy facebook hiển thị quảng cáo liên quan đến những gì tôi duyệt từ google!
Ari

16
Trên thực tế, Facebook đặt cookie của riêng mình trên mọi trang web ... bằng cách sử dụng nút Thích. Tôi cá là Google cũng làm như vậy trên các nút +1 hoặc thậm chí trên các tập lệnh thống kê trang web.
PhiLho

1
Cảm ơn bạn ..., nó đang mở rộng tầm mắt của tôi. Tôi nghĩ rằng bất kỳ loại ứng dụng nào liên quan đến họ đều sẽ làm được, kể cả đăng nhập bằng ứng dụng tài khoản mạng xã hội.
Ari

2
@SoursopTree - Nó không phải là AdChoices? Facebook sử dụng Lựa chọn quảng cáo, là một dịch vụ của Google hiển thị nội dung dựa trên các tìm kiếm của bạn thông qua Google. Stackoverflow cũng sử dụng Lựa chọn quảng cáo. Tôi có thể hơi thiếu chi tiết chính xác - nhưng tôi đoán đó là những gì bạn đang nghĩ đến.
Rik

1
@KeepMove chúng tôi gọi thuật ngữ này là đồng bộ hóa cookie
ericdemo07

12

Để truy xuất tất cả cookie cho tài liệu hiện tại đang mở trong trình duyệt, bạn lại sử dụng thuộc document.cookietính.


4

Cách tiếp cận hiện đại.

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

console.log(c);

;)


2

Vì tiêu đề không chỉ rõ rằng nó phải được lập trình nên tôi sẽ giả định rằng đó là vấn đề gỡ lỗi / quản lý quyền riêng tư thực sự và giải pháp phụ thuộc vào trình duyệt và yêu cầu trình duyệt được tích hợp sẵn số phí quản lý cookie chi tiết và / hoặc mô-đun gỡ lỗi hoặc một trình cắm thêm / tiện ích mở rộng. Tôi sẽ liệt kê một danh sách và yêu cầu những người khác viết lên các trình duyệt mà họ biết một cách chi tiết và hãy chính xác với các phiên bản.

Chromium, sắt xây dựng (SRWare Iron 4.0.280)

Trình đơn cờ lê (công cụ): Tùy chọn / Nâng cao / [Hiển thị cookie và quyền trang web] Đối với các miền / trang web liên quan, hãy nhập hậu tố vào hộp tìm kiếm (như .foo.tv). Lưu ý: khi bạn có một nút (trang web hoặc cookie) được đánh dấu, chỉ sử dụng [Xóa] để loại bỏ các cây con cụ thể. Sử dụng [Xóa tất cả] sẽ vẫn xóa cookie cho tất cả các trang web được chọn bởi tìm kiếm và lãng phí phiên gỡ lỗi của bạn.


1

Đã thêm trim () vào khóa trong đối tượng và đặt tên là str, vì vậy sẽ rõ ràng hơn rằng chúng ta đang xử lý chuỗi ở đây.

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


0

Những gì bạn đang yêu cầu là có thể; nhưng điều đó sẽ chỉ hoạt động trên một trình duyệt cụ thể. Bạn phải phát triển một ứng dụng mở rộng trình duyệt để đạt được điều này. Bạn có thể đọc thêm về chrome api để hiểu rõ hơn. https://developer.chrome.com/extensions/cookies

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.