2010-08-03 31 views
42

Có cách nào, với sự trợ giúp của Javascript, liệt kê tất cả cookie được liên kết với trang hiện tại không? Đó là, nếu tôi không biết tên của các tập tin cookie nhưng muốn lấy tất cả các thông tin mà chúng chứa.Tôi làm cách nào để liệt kê tất cả cookie cho trang hiện tại bằng Javascript?

+0

Vui lòng làm rõ nếu theo "trang nhất định", bạn có nghĩa là "trang mà người dùng hiện đang truy cập". Câu trả lời của DixonD được tìm thấy trên các cookie hiện tại. Tất cả các tên miền khác đều không phù hợp vì lý do bảo mật. –

+1

Có. Tôi đang nói về trang mà người dùng hiện đang truy cập. – Speldosa

+1

OK. Tôi đã chỉnh sửa tiêu đề và câu hỏi để phản ánh điều đó. Câu trả lời của DixonD là thích hợp ở đây. –

Trả lời

54

Bạn có thể liệt kê các tập tin cookie cho tên miền hiện tại:

function listCookies() { 
    var theCookies = document.cookie.split(';'); 
    var aString = ''; 
    for (var i = 1 ; i <= theCookies.length; i++) { 
     aString += i + ' ' + theCookies[i-1] + "\n"; 
    } 
    return aString; 
} 

Nhưng bạn không thể liệt kê các tập tin cookie cho các tên miền khác cho lý do an ninh

+1

Tôi phải là vụng về trong mô tả của tôi về vấn đề này. Những gì tôi muốn làm là lấy danh sách tất cả các cookie được tạo bởi bất kỳ tài liệu html nào trong cùng một danh mục. Trong tài liệu html, tôi chỉ cần thêm mã sau đây: var x = document.cookie; window.alert (x); ... và tôi có thể thấy tất cả các cookie mà tôi đã tạo. Xin lỗi nếu tôi thể hiện bản thân mình một cách không rõ ràng. Cảm ơn tất cả các câu trả lời nhanh chóng mặc dù. Tôi cũng thích trang này :) – Speldosa

+3

Điều này cũng không hoạt động khi cookie đã được đặt giá trị '' 'httpOnly = true'''. –

+1

Đầu ra Nicer thông qua 'aString + = i + '' + decodeURIComponent (theCookies [i-1]) +" \ n ";' –

1

Không có. Bạn chỉ có thể đọc thông tin được liên kết với tên miền hiện tại.

+0

Damn :) Ok ... Câu hỏi tiếp theo: 1. Có cách nào để kiểm tra xem một cookie cụ thể có tồn tại không (với một tên nào đó mà bạn biết)? 2. Có loại tài liệu hướng dẫn nào cho JavaScript, ví dụ lớp document.cookie được mô tả chi tiết không? – Speldosa

+0

Tài nguyên tốt: http://www.w3schools.com/JS/js_cookies.asp – tur1ng

+0

Tôi cũng nghĩ vậy. Tuy nhiên, tôi muốn giữ một số thứ tương đương với điều này: http://download.oracle.com/javase/1.4.2/docs/api/overview-summary.html – Speldosa

1

No.

Các trình duyệt API duy nhất cung cấp cho bạn để xử lý cookie đang nhận và đặt chúng thông qua các cặp khóa-giá trị. Tất cả các trình duyệt đều xử lý cookie theo tên miền chỉ.

Truy cập tất cả cookie cho miền hiện tại được thực hiện qua document.cookie.

+1

Điều này không hoạt động nếu bạn đã đặt cookie với httpOnly, được khuyến nghị, vì nó giúp giảm thiểu các hậu quả tiêu cực của một cuộc tấn công XSS. – Flimm

4
var x = document.cookie; 
window.alert(x); 

Điều này hiển thị mọi cookie mà trang web hiện tại có quyền truy cập. Ví dụ: nếu bạn đã tạo hai cookie "username = Frankenstein" và "username = Dracula", hai dòng mã này sẽ hiển thị "username = Frankenstein; username = Dracula". Tuy nhiên, thông tin như ngày hết hạn sẽ không được hiển thị.

+1

Điều này không có tác dụng nếu bạn đã đặt cookie bằng 'httpOnly', được khuyến nghị, vì nó giúp giảm bớt hậu quả tiêu cực của một cuộc tấn công XSS. – Flimm

0

Chức năng này sẽ trả lại tất cả các tập tin cookie như một đối tượng lồng nhau (s):

getDocumentCookies = function() { 
    var theCookies = document.cookie.split(';'), 
     cookieObj = {}, 
     tmp, tmpName, tmpVal; 
    for (var i = 1 ; i <= theCookies.length; i++) { 
     tmp = theCookies[i-1].split('='); 
     if (tmp[0] !== undefined && tmp[1] !== undefined) { 
      tmpName = decodeURIComponent(tmp[0].trim()); 
      tmpVal = decodeURIComponent(tmp[1].trim()); 
      if (tmpName.indexOf('[') > -1 && tmpName.indexOf(']') > -1) { 
       cookieObj[tmpName.split('[')[0]] = cookieObj[tmpName.split('[')[0]] || {}; 
       cookieObj[tmpName.split('[')[0]][tmpName.split('[')[1].replace(']', '')] = tmpVal; 
      } else { 
       cookieObj[tmpName] = tmpVal; 
      } 
     } 
    } 
    return cookieObj; 
}; 
0

Nhiều người đã đề cập rằng document.cookie giúp bạn tất cả các cookie (trừ http-only người).

Tôi sẽ chỉ thêm đoạn mã để theo kịp thời gian.

document.cookie.split(';').reduce((cookies, cookie) => { 
    let [ name, value ] = cookie.split('=').map(c => c.trim()); 
    cookies[name] = value; 
    return cookies; 
}, {}); 

Đoạn mã sẽ trả về đối tượng có tên cookie là khóa có giá trị cookie làm giá trị.

Các vấn đề liên quan