2012-06-10 6 views
30

Tôi đang làm việc trên ứng dụng Node sử dụng Express và SocketIO. Tôi muốn thiết lập một cookie trong bộ điều khiển Express của tôi, sau đó có thể truy cập từ mã Javascript phía máy khách của tôi. Mọi thứ tôi cố gắng dường như không hoạt động:Đặt cookie có thể truy cập phía máy khách trong Express

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

Có điều gì tôi thiếu ở đây không? Cảm ơn trước!

+0

Có thể giúp hiển thị mã client-side. – ebohlman

+0

Tôi chỉ truy cập trình kiểm tra Chrome và xem cookie. Không thấy bất cứ điều gì mặc dù ... – dshipper

Trả lời

48

Đã tìm ra! Theo mặc định, Express đặt tùy chọn httpOnly thành true. Điều này có nghĩa là cookie của bạn không thể được truy cập bởi Javascript phía máy khách. Để thiết lập một cách chính xác các tập tin cookie truy cập trên máy khách chỉ cần sử dụng một đoạn như sau:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

Tôi cũng đã nhận thấy rằng nếu bạn gọi lệnh này và sau đó gọi res.redirect, cookie sẽ không được thiết lập . Lệnh này cần phải được theo sau bởi res.render tại một số điểm để cho nó hoạt động. Không chắc chắn lý do tại sao đây là.

+0

Đó là một thông tin tốt. Bạn có biết cách truy cập cookie phía máy khách ở phía máy chủ trong khung công tác nhanh không? – user644745

+5

@ user644745 bạn có thể đọc cookie bằng Express bằng cách xem đối tượng 'res.cookies'. Ví dụ: cookie có tên 'session_id' sẽ tồn tại ở' res.cookies.session_id'. http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

Lý do tại sao bạn cần gọi res.render hoặc res.send là vì việc đặt cookie không bắt đầu phản hồi. Gửi và Render làm. Phương pháp cookie này chỉ thêm cookie vào đối tượng phản hồi. –

3

Thực ra tôi đã gặp phải sự cố tương tự trong vài giờ.

Đây là mã của tôi:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

tôi có thể xem hướng dẫn Set-Cookie trong phần đầu phản ứng, nhưng trong Chrome tôi không thể tìm thấy các tập tin cookie và tôi không thể tìm thấy các tập tin cookie của req.cookies [' mycookie '].

Nguyên nhân gốc của vấn đề này là tôi không sử dụng kết nối HTTPS. (Express 4.x với cookie-phân tích cú pháp middleware)

Theo tài liệu này: Simple Steps to Secure Your Express Node App

Nếu tôi đặt tùy chọn an toàn = true, sau đó trình duyệt sẽ không gửi cookie của tôi trong bất kỳ yêu cầu HTTP nhưng kết nối HTTPS an toàn . Sau đó, sau khi tôi gỡ bỏ an toàn: tùy chọn đúng, tôi đã nhận được công việc cookie của mình.

0

như vậy để truy cập vào http chúng ta có thể sử dụng:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?