2013-04-10 33 views
21

Tôi có vấn đề này thực sự lạ với cookie cài đặt javascript phía khách hàng. Tôi đang phát triển một bản trình diễn 1 trang nhỏ vào lúc này để sử dụng cookie để lưu trữ một số 'sở thích'. Xin lưu ý rằng tôi không thể sử dụng ngôn ngữ phía máy chủ cho bản trình diễn này hoặc bất kỳ plugin jQuery của bên thứ ba nào.Javascript document.cookie luôn rỗng chuỗi

Vì vậy, tôi đã viết một đối tượng javascript để thiết lập một cookie:

var cookie = { 
    set: function (name,value,exdays) { 

    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); 
    document.cookie=name + "=" + value; 
    console.log(document.cookie); 
    } 
} 

cookie.set('foo','bar',2); 
console.log(document.cookie); 

Nó chỉ trả về một chuỗi rỗng. Tôi đã đi vào Chrome giao diện điều khiển để xem nếu tôi có thể làm điều đó thông qua trực tiếp sửa đổi document.cookie

> document.cookie = "foo=bar"; 
"foo=bar" 
> document.cookie 
"" 

Làm thế nào để bạn thiết lập một cookie qua phía khách hàng javascript?

Chỉnh sửa: Tôi không ở chế độ ẩn danh và cookie được bật.

+0

Cũng xem https://developer.mozilla.org/en-US/docs/DOM/document.cookie –

+0

Có vấn đề tương tự (nhưng không giống nhau). Chúng tôi có thể đọc và ghi cookie, không phải tất cả chúng. Cụ thể là cookie phiên (JSESSIONID) không thể đọc được ... Có vẻ như đây là tính năng bảo mật nhưng gặp khó khăn trong việc tìm kiếm thông tin về nó ... Bất kỳ ai biết về điều này? –

+2

@StijndeWitt: Đó là một câu hỏi khác, vui lòng tự hỏi nó thay vì thêm tiền thưởng cho điều này. Btw, câu trả lời có thể là ['http-only' cookies] (http://en.wikipedia.org/wiki/HTTP_cookie#HttpOnly_cookie) – Bergi

Trả lời

35

Bạn không thể đặt cookie theo giao diện nếu mọi thứ không chạy trên máy chủ web.

file:///C:/Users/me/Desktop/demo/demo.html

tuy nhiên:

http://localhost/demo/demo.html công trình.

+0

Điều này khiến tôi hiểu một vài lần trước khi tôi biết về nó. –

+11

thực sự các cookie sẽ không hoạt động đúng với 'localhost', bạn sẽ cần một miền" hợp lệ ", ngay cả khi đó là IP, chẳng hạn như 127.0.0.1 hoặc 0.0.0.0 chẳng hạn. kiểm tra http: // stackoverflow.com/questions/1134290/cookies-on-localhost-với-tên miền rõ ràng/1188145 # 1188145 –

+0

bạn đã giúp chúng tôi rất nhiều –

35

HttpChỉ cookie không thể truy cập được từ Javascript và cookie phiên thường được đặt làm cookie HttpOnly. Xem thêm câu hỏi StackOverflow này: How to read a secure cookie using JavaScript

Vì vậy, hãy kiểm tra xem cookie bạn muốn có cờ 'HttpOnly' ... Nếu vậy, bạn biết thủ phạm. Nó không phải là một lỗi, nó là một tính năng!

+1

đó là khó hiểu với tôi tại sao "trả lời" có rất nhiều upvotes vì ​​nó không thể đặt HttpOnly trên một cookie được viết bằng javascript. –

+0

Tiêu đề: 'Tài liệu Javascript.cookie luôn rỗng chuỗi'. Trả lời: Có thể xảy ra khi chỉ có cookie với cờ 'HttpOnly' được đặt. Không, bạn không thể * ghi * các cookie này từ JS, nhưng bạn có thể * cố gắng * đọc cookie từ JS và nó sẽ trả về ... chuỗi rỗng ... mặc dù bạn thấy cookie trong tiêu đề HTTP và trong trình duyệt thanh tra viên, JS sẽ không cho phép bạn đọc nó. –

+0

Tôi nghĩ rằng nó đã upvotes vì: '1)' người thực sự thường cố gắng để đọc ví dụ cookie phiên từ JS. '2)' Họ nhận được chuỗi rỗng như là một kết quả. '3)' Họ google và đến đây. '4)' Họ thấy câu trả lời này và darn nó, đó là chính xác những gì đang xảy ra. '5)' Cảm ơn người đàn ông +1. :) –

0

này đã làm việc cho tôi khi chạy từ localhost, chạy chrome 28.0.1472.0 chim hoàng yến:

<!DOCTYPE html> 
<html> 
<head> 
    <title>localhost cookie</title> 
</head> 
<body> 
    <script type="text/javascript"> 
    console.log(document.cookie); 
    var myCookie = "mycookie=hellocookie"; 
    document.cookie = myCookie; 
    </script> 
</body> 
</html> 

Run nó trong một máy chủ, hãy truy cập trang và nhìn vào cửa hàng cookie của mình, làm mới trang và nhìn vào bạn giao diện điều khiển.

Nó không đặt cookie khi được mở dưới dạng tệp nhưng hoạt động mỗi khi được mở từ máy chủ.

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