Sự khác biệt giữa việc tạo cookie trên máy chủ và trên máy khách là gì? Chúng được gọi là cookie phía máy chủ và cookie phía máy khách? Có cách nào để tạo cookie chỉ có thể đọc trên máy chủ hoặc trên máy khách không?
Sự khác biệt giữa việc tạo cookie trên máy chủ và trên máy khách là gì? Chúng được gọi là cookie phía máy chủ và cookie phía máy khách? Có cách nào để tạo cookie chỉ có thể đọc trên máy chủ hoặc trên máy khách không?
Câu trả lời:
Cookie là cặp khóa / giá trị được các trang web sử dụng để lưu trữ thông tin trạng thái trên trình duyệt. Giả sử bạn có một trang web (example.com), khi trình duyệt yêu cầu một trang web, trang web có thể gửi cookie để lưu trữ thông tin trên trình duyệt.
Ví dụ về yêu cầu trình duyệt:
GET /index.html HTTP/1.1
Host: www.example.com
Câu trả lời ví dụ từ máy chủ:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
Ở đây hai cookie foo = 10 và bar = 20 được lưu trữ trên trình duyệt. Cái thứ hai sẽ hết hạn vào ngày 30 tháng 9. Trong mỗi yêu cầu tiếp theo, trình duyệt sẽ gửi cookie trở lại máy chủ.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
Cookie phía máy chủ được gọi là "phiên". Trang web trong trường hợp này lưu trữ một cookie duy nhất trên trình duyệt có chứa Mã nhận dạng phiên duy nhất. Thông tin trạng thái (foo = 10 và bar = 20 ở trên) được lưu trữ trên máy chủ và Mã định danh phiên được sử dụng để khớp yêu cầu với dữ liệu được lưu trữ trên máy chủ.
Bạn có thể sử dụng cả phiên và cookie để lưu trữ: dữ liệu xác thực, tùy chọn người dùng, nội dung của biểu đồ trong trang web thương mại điện tử, v.v.
Dưới đây là ưu và nhược điểm của các giải pháp. Đây là những thứ đầu tiên xuất hiện trong đầu tôi, chắc chắn còn có những người khác.
Ưu điểm về Cookie:
Nhược điểm của Cookie:
Ưu điểm phiên:
Nhược điểm của phiên:
secure
:?
Có thể ý bạn là sự khác biệt giữa cookie Http Only và phần truy cập của chúng?
Http Chỉ không thể truy cập cookie (đọc từ hoặc ghi vào) bằng JavaScript phía máy khách, chỉ phía máy chủ. Nếu cờ Http Only không được đặt hoặc cookie được tạo trong JavaScript (phía máy khách), cookie có thể được đọc và ghi vào JavaScript (phía máy khách) cũng như phía máy chủ.
Tất cả cookie là máy khách và máy chủ
Không có sự khác biệt. Một cookie thông thường có thể được đặt phía máy chủ hoặc phía máy khách. Cookie 'cổ điển' sẽ được gửi lại theo từng yêu cầu. Một cookie do máy chủ đặt, sẽ được gửi đến máy khách trong một phản hồi. Máy chủ chỉ gửi cookie khi nó được thiết lập hoặc thay đổi rõ ràng, trong khi máy khách gửi cookie theo từng yêu cầu.
Nhưng về cơ bản nó là cùng một cookie.
Nhưng, hành vi có thể thay đổi
Về cơ bản cookie là một name=value
cặp, nhưng sau giá trị có thể là một loạt các thuộc tính được phân tách bằng dấu chấm phẩy ảnh hưởng đến hành vi của cookie nếu nó được triển khai bởi máy khách (hoặc máy chủ). Các thuộc tính đó có thể là về thời gian tồn tại, ngữ cảnh và các cài đặt bảo mật khác nhau.
Chỉ HTTP (không chỉ dành cho máy chủ)
Một trong những thuộc tính đó có thể được máy chủ đặt để chỉ ra rằng đó là cookie chỉ HTTP. Điều này có nghĩa là cookie vẫn được gửi đi gửi lại, nhưng nó sẽ không khả dụng trong JavaScript. Tuy nhiên, hãy lưu ý rằng cookie vẫn còn ở đó! Đó chỉ là một biện pháp bảo vệ được tích hợp sẵn trong trình duyệt, nhưng nếu ai đó sử dụng một trình duyệt cũ đến mức nực cười như IE5 hoặc một ứng dụng khách tùy chỉnh nào đó, họ thực sự có thể đọc được cookie!
Vì vậy, có vẻ như có 'cookie máy chủ', nhưng thực tế không có. Những cookie đó vẫn được gửi đến khách hàng. Trên máy khách, không có cách nào để ngăn cookie được gửi đến máy chủ.
Các giải pháp thay thế để đạt được 'only-ness'
Nếu bạn chỉ muốn lưu trữ một giá trị trên máy chủ hoặc chỉ trên máy khách, thì bạn cần một số loại lưu trữ khác, như tệp hoặc cơ sở dữ liệu trên máy chủ hoặc Bộ nhớ cục bộ trên máy khách.
document.cookie="foo=bar"
theo sau fetch("/foobar", {credentials: 'include'} )
thì không có cookie nào được gửi có chứa foo=bar
. Chỉ cần thử mã đó trực tiếp trên trang web này bằng DevTools và bảng điều khiển.
Có, bạn có thể tạo cookie chỉ có thể được đọc ở phía máy chủ. Chúng được gọi là -cookies "Chỉ HTTP", như đã giải thích trong các câu trả lời khác
Không, không có cách nào (tôi biết) để tạo "cookie" chỉ có thể đọc ở phía máy khách. Cookie nhằm tạo điều kiện giao tiếp giữa máy khách và máy chủ.
NHƯNG, nếu bạn muốn một thứ gì đó THÍCH "client-only-cookies" thì có một câu trả lời đơn giản: Sử dụng "Local Storage".
Local Storage thực sự đơn giản hơn về mặt cú pháp so với cookie. Bạn có thể tìm thấy một bản tóm tắt đơn giản tốt về cookie so với lưu trữ cục bộ tại:
Một điểm: Bạn có thể sử dụng cookie được tạo bằng JavaScript để lưu trữ những thứ liên quan đến GUI mà bạn chỉ cần ở phía máy khách. NHƯNG cookie được gửi đến máy chủ cho MỌI yêu cầu được thực hiện, nó trở thành một phần của tiêu đề http-request, do đó làm cho yêu cầu chứa nhiều dữ liệu hơn và do đó gửi chậm hơn.
Nếu trang của bạn có 50 tài nguyên như hình ảnh và tệp css và tập lệnh thì cookie sẽ được gửi (thường) theo mỗi yêu cầu. Thông tin thêm về điều này trong Mọi yêu cầu web đều gửi cookie của trình duyệt?
Lưu trữ cục bộ không có những nhược điểm liên quan đến truyền dữ liệu, nó không gửi dữ liệu. Nó thật tuyệt.