Điều gì xảy ra khi cookie hết hạn Javascript?
Cookies là các chuỗi dữ liệu nhỏ được lưu trữ trực tiếp trong trình duyệt. Chúng là một phần của giao thức HTTP, được xác định bởi đặc tả RFC 6265 Cookie thường được đặt bởi máy chủ web bằng cách sử dụng phản hồi 2 HTTP-header. Sau đó, trình duyệt sẽ tự động thêm chúng vào (hầu hết) mọi yêu cầu đối với cùng một miền bằng cách sử dụng tiêu đề HTTP 3Một trong những trường hợp sử dụng phổ biến nhất là xác thực
Chúng tôi cũng có thể truy cập cookie từ trình duyệt, sử dụng thuộc tính 6Có nhiều điều phức tạp về cookie và các tùy chọn của chúng. Trong chương này, chúng tôi sẽ đề cập chi tiết Trình duyệt của bạn có lưu trữ bất kỳ cookie nào từ trang web này không?
Giá trị của 6 bao gồm các cặp 8, được phân định bởi 9. Mỗi cái là một cookie riêng biệtĐể tìm một cookie cụ thể, chúng ta có thể tách 6 cho 9, sau đó tìm đúng tên. Chúng ta có thể sử dụng biểu thức chính quy hoặc hàm mảng để làm điều đóChúng tôi để nó như một bài tập cho người đọc. Ngoài ra, ở cuối chương, bạn sẽ tìm thấy các hàm trợ giúp để thao tác với cookie Chúng ta có thể viết thư cho 6. Nhưng nó không phải là một thuộc tính dữ liệu, nó là một bộ truy cập (getter/setter). Một nhiệm vụ cho nó được đối xử đặc biệtThao tác ghi vào 6 chỉ cập nhật các cookie được đề cập trong đó, nhưng không chạm vào các cookie khácChẳng hạn, cuộc gọi này đặt cookie có tên 4 và giá trị 5
Nếu bạn chạy nó, thì có thể bạn sẽ thấy nhiều cookie. Đó là bởi vì hoạt động 6 không ghi đè lên tất cả các cookie. Nó chỉ đặt cookie đã đề cập 4Về mặt kỹ thuật, tên và giá trị có thể có bất kỳ ký tự nào. Để giữ định dạng hợp lệ, chúng phải được thoát bằng hàm 8 tích hợp
Hạn chế Có một số hạn chế
Cookie có một số tùy chọn, nhiều tùy chọn trong số đó rất quan trọng và nên được đặt Các tùy chọn được liệt kê sau 1, được phân cách bởi 9, như thế này
Tiền tố đường dẫn url phải là tuyệt đối. Nó làm cho cookie có thể truy cập được đối với các trang trong đường dẫn đó. Theo mặc định, đó là đường dẫn hiện tại Nếu một cookie được đặt bằng 4, nó sẽ hiển thị ở các trang 5 và 6, nhưng không hiển thị ở trang 7 hoặc 8Thông thường, chúng ta nên đặt 9 vào thư mục gốc. 0 để có thể truy cập cookie từ tất cả các trang của trang web
Miền xác định nơi có thể truy cập cookie. Tuy nhiên, trong thực tế vẫn còn những hạn chế. Chúng tôi không thể đặt bất kỳ tên miền nào Không có cách nào để cookie có thể truy cập được từ một tên miền cấp 2 khác, vì vậy, 2 sẽ không bao giờ nhận được cookie được đặt tại 3Đó là một hạn chế về an toàn, để cho phép chúng tôi lưu trữ dữ liệu nhạy cảm trong cookie chỉ khả dụng trên một trang web Theo mặc định, cookie chỉ có thể truy cập được tại miền đã đặt cookie Xin lưu ý, theo mặc định, cookie cũng không được chia sẻ với tên miền phụ, chẳng hạn như 4
…Nhưng điều này có thể thay đổi. Nếu chúng tôi muốn cho phép các tên miền phụ như 4 nhận cookie được đặt tại 3, điều đó là có thểĐể điều đó xảy ra, khi đặt cookie tại 3, chúng ta nên đặt rõ ràng tùy chọn 8 cho tên miền gốc. 1. Sau đó, tất cả các tên miền phụ sẽ thấy cookie đóVí dụ
Vì lý do lịch sử, 0 (có dấu chấm trước 3) cũng hoạt động theo cách tương tự, cho phép truy cập cookie từ tên miền phụ. Đó là một ký hiệu cũ và nên được sử dụng nếu chúng tôi cần hỗ trợ các trình duyệt rất cũTóm lại, tùy chọn 8 cho phép tạo cookie có thể truy cập được tại các tên miền phụTheo mặc định, nếu cookie không có một trong các tùy chọn này, nó sẽ biến mất khi đóng trình duyệt. Những cookie như vậy được gọi là "cookie theo phiên" Để cookie tồn tại khi đóng trình duyệt, chúng tôi có thể đặt tùy chọn 3 hoặc 4
Ngày hết hạn cookie xác định thời gian, khi trình duyệt sẽ tự động xóa nó Ngày phải chính xác ở định dạng này, theo múi giờ GMT. Chúng ta có thể sử dụng 6 để lấy nó. Chẳng hạn, chúng tôi có thể đặt cookie hết hạn sau 1 ngày
Nếu chúng tôi đặt 3 thành một ngày trong quá khứ, cookie sẽ bị xóa
Đó là một giải pháp thay thế cho 3 và chỉ định thời hạn hết hạn của cookie tính bằng giây kể từ thời điểm hiện tạiNếu được đặt thành 0 hoặc giá trị âm, cookie sẽ bị xóa
Cookie chỉ nên được chuyển qua HTTPS Theo mặc định, nếu chúng tôi đặt cookie ở 1, thì nó cũng xuất hiện ở 2 và ngược lạiNghĩa là, cookie dựa trên tên miền, chúng không phân biệt giữa các giao thức Với tùy chọn này, nếu một cookie được đặt bởi 2, thì nó sẽ không xuất hiện khi cùng một trang web được truy cập bởi HTTP, như 1. Vì vậy, nếu một cookie có nội dung nhạy cảm không bao giờ được gửi qua HTTP không được mã hóa, thì cờ 0 là điều đúng đắn
Đó là một thuộc tính bảo mật khác 6. Nó được thiết kế để bảo vệ khỏi cái gọi là tấn công XSRF (giả mạo yêu cầu giữa các trang web)Để hiểu cách nó hoạt động và khi nó hữu ích, hãy xem các cuộc tấn công XSRF Hãy tưởng tượng, bạn đã đăng nhập vào trang web 7. Đó là. bạn có cookie xác thực từ trang web đó. Trình duyệt của bạn sẽ gửi nó tới 7 với mọi yêu cầu, để nó nhận ra bạn và thực hiện tất cả các hoạt động tài chính nhạy cảmBây giờ, trong khi duyệt web trong một cửa sổ khác, bạn vô tình đến một trang web khác 9. Trang web đó có mã JavaScript gửi biểu mẫu 0 đến 7 với các trường bắt đầu giao dịch tới tài khoản của tin tặcTrình duyệt gửi cookie mỗi khi bạn truy cập trang web ________ 51 _______7, ngay cả khi biểu mẫu đã được gửi từ ________ 51 _______9. Vì vậy, ngân hàng nhận ra bạn và thực sự thực hiện thanh toán Đó là cái gọi là cuộc tấn công “Cross-Site Request Forgery” (viết tắt là XSRF) Các ngân hàng thực sự được bảo vệ khỏi nó tất nhiên. Tất cả các biểu mẫu được tạo bởi 7 đều có một trường đặc biệt, được gọi là “mã thông báo bảo vệ XSRF”, mà một trang xấu không thể tạo hoặc trích xuất từ một trang từ xa. Nó có thể gửi một biểu mẫu ở đó, nhưng không thể lấy lại dữ liệu. Trang web 7 kiểm tra mã thông báo đó ở mọi dạng mà nó nhận đượcViệc bảo vệ như vậy cần có thời gian để thực hiện mặc dù. Chúng tôi cần đảm bảo rằng mọi biểu mẫu đều có trường mã thông báo bắt buộc và chúng tôi cũng phải kiểm tra tất cả các yêu cầu Tùy chọn cookie ________ 51 _______ 6 cung cấp một cách khác để bảo vệ khỏi các cuộc tấn công như vậy, mà (về lý thuyết) không yêu cầu “mã thông báo bảo vệ csrf” Nó có hai giá trị có thể
Cookie có 7 sẽ không bao giờ được gửi nếu người dùng đến từ bên ngoài cùng một trang webNói cách khác, cho dù người dùng nhấp vào liên kết từ thư của họ hoặc gửi biểu mẫu từ 9 hoặc thực hiện bất kỳ thao tác nào bắt nguồn từ miền khác, cookie sẽ không được gửiNếu cookie xác thực có tùy chọn 6, thì cuộc tấn công XSRF không có cơ hội thành công vì gửi từ 9 không có cookie. Vì vậy, 7 sẽ không nhận ra người dùng và sẽ không tiến hành thanh toánBảo vệ khá đáng tin cậy. Chỉ các thao tác đến từ 7 mới gửi cookie 6, e. g. gửi biểu mẫu từ một trang khác tại 7Mặc dù, có một sự bất tiện nhỏ Khi người dùng theo một liên kết hợp pháp đến 7, chẳng hạn như từ ghi chú của chính họ, họ sẽ ngạc nhiên rằng 7 không nhận ra họ. Thật vậy, 7 cookie không được gửi trong trường hợp đóChúng tôi có thể giải quyết vấn đề đó bằng cách sử dụng hai cookie. một cho "sự công nhận chung", chỉ với mục đích nói. “Xin chào, John” và một cái khác dành cho các hoạt động thay đổi dữ liệu với 7. Sau đó, một người đến từ bên ngoài trang web sẽ thấy chào mừng, nhưng các khoản thanh toán phải được thực hiện từ trang web của ngân hàng để cookie thứ hai được gửi
Một cách tiếp cận thoải mái hơn cũng bảo vệ khỏi XSRF và không phá vỡ trải nghiệm người dùng Chế độ lỏng lẻo, giống như 2, cấm trình duyệt gửi cookie khi đến từ bên ngoài trang web, nhưng thêm một ngoại lệMột cookie 1 được gửi nếu cả hai điều kiện này đều đúng
Vì vậy, điều mà 1 làm, về cơ bản là cho phép thao tác “đi tới URL” phổ biến nhất có cookie. e. g. mở một liên kết trang web từ các ghi chú đáp ứng các điều kiện nàyNhưng bất cứ điều gì phức tạp hơn, chẳng hạn như yêu cầu mạng từ một trang web khác hoặc gửi biểu mẫu, sẽ mất cookie Nếu điều đó phù hợp với bạn, thì việc thêm 1 có thể sẽ không ảnh hưởng đến trải nghiệm người dùng và thêm khả năng bảo vệNhìn chung, 6 là một lựa chọn tuyệt vờiCó một nhược điểm
Vì vậy, nếu chúng tôi chỉ dựa vào 6 để cung cấp sự bảo vệ, thì các trình duyệt cũ sẽ dễ bị tấn côngNhưng chúng tôi chắc chắn có thể sử dụng 6 cùng với các biện pháp bảo vệ khác, chẳng hạn như mã thông báo xsrf, để thêm một lớp bảo vệ bổ sung và sau đó, trong tương lai, khi các trình duyệt cũ ngừng hoạt động, chúng tôi có thể sẽ loại bỏ mã thông báo xsrfTùy chọn này không liên quan gì đến JavaScript, nhưng chúng tôi phải đề cập đến nó cho đầy đủ Máy chủ web sử dụng tiêu đề 2 để đặt cookie. Ngoài ra, nó có thể đặt tùy chọn 02Tùy chọn này cấm mọi quyền truy cập JavaScript vào cookie. Chúng tôi không thể nhìn thấy một cookie như vậy hoặc thao tác với nó bằng cách sử dụng 6Điều đó được sử dụng như một biện pháp phòng ngừa, để bảo vệ khỏi một số cuộc tấn công nhất định khi tin tặc đưa mã JavaScript của chính anh ta vào một trang và đợi người dùng truy cập trang đó. Điều đó hoàn toàn không thể xảy ra, tin tặc sẽ không thể đưa mã của họ vào trang web của chúng tôi, nhưng có thể có lỗi cho phép họ làm điều đó Thông thường, nếu điều đó xảy ra và người dùng truy cập trang web bằng mã JavaScript của hacker, thì mã đó sẽ thực thi và giành quyền truy cập vào 6 bằng cookie người dùng chứa thông tin xác thực. Điều đó thật xấuNhưng nếu một cookie là 02, thì 6 không nhìn thấy nó, vì vậy nó được bảo vệĐây là một tập hợp nhỏ các chức năng để hoạt động với cookie, thuận tiện hơn so với sửa đổi thủ công của 6Có nhiều thư viện cookie cho điều đó, vì vậy những thư viện này là dành cho mục đích demo. Hoàn toàn làm việc mặc dù Cách ngắn nhất để truy cập cookie là sử dụng biểu thức chính quy Hàm 08 trả về cookie với giá trị 09 đã cho
Ở đây 10 được tạo động, để khớp với 11Xin lưu ý rằng giá trị cookie được mã hóa, vì vậy, 12 sử dụng hàm 13 tích hợp để giải mãĐặt 09 của cookie thành 15 đã cho với 0 theo mặc định (có thể được sửa đổi để thêm các giá trị mặc định khác) 0Để xóa cookie, chúng ta có thể gọi nó với ngày hết hạn âm 1Cập nhật hoặc xóa phải sử dụng cùng một đường dẫn và tên miền Xin lưu ý. khi chúng tôi cập nhật hoặc xóa cookie, chúng tôi nên sử dụng chính xác các tùy chọn tên miền và đường dẫn giống như khi chúng tôi đặt nó Cùng với nhau. bánh quy. js Cookie được gọi là "bên thứ ba" nếu nó được đặt bởi một tên miền khác với trang mà người dùng đang truy cập Ví dụ
Cookie của bên thứ ba thường được sử dụng cho các dịch vụ theo dõi và quảng cáo, do bản chất của chúng. Chúng bị ràng buộc với miền ban đầu, vì vậy 19 có thể theo dõi cùng một người dùng giữa các trang web khác nhau, nếu tất cả họ đều truy cập vào nóĐương nhiên, một số người không thích bị theo dõi, vì vậy các trình duyệt cho phép tắt các cookie đó Ngoài ra, một số trình duyệt hiện đại sử dụng các chính sách đặc biệt cho các cookie đó
Xin lưu ý Nếu chúng tôi tải tập lệnh từ miền của bên thứ ba, chẳng hạn như 31 và tập lệnh đó sử dụng 6 để đặt cookie, thì cookie đó không phải là của bên thứ baNếu tập lệnh đặt cookie, thì bất kể tập lệnh đến từ đâu – cookie thuộc về miền của trang web hiện tại Chủ đề này hoàn toàn không liên quan đến JavaScript, chỉ là một điều cần lưu ý khi đặt cookie Có một luật ở Châu Âu gọi là GDPR, thực thi một bộ quy tắc để các trang web tôn trọng quyền riêng tư của người dùng. Một trong những quy tắc này là yêu cầu quyền rõ ràng để theo dõi cookie từ người dùng Xin lưu ý, đó chỉ là về theo dõi/xác định/ủy quyền cookie Vì vậy, nếu chúng tôi đặt cookie chỉ lưu một số thông tin, nhưng không theo dõi cũng như không xác định người dùng, thì chúng tôi có thể tự do thực hiện Nhưng nếu chúng tôi định đặt cookie có phiên xác thực hoặc id theo dõi, thì người dùng phải cho phép điều đó Các trang web thường có hai biến thể tuân theo GDPR. Chắc hẳn bạn đã thấy cả hai trên web rồi
GDPR không chỉ về cookie mà còn về các vấn đề khác liên quan đến quyền riêng tư, nhưng điều đó vượt quá phạm vi của chúng tôi Cookie hết hạn có bị xóa không?Hầu hết các cookie đều có ngày hết hạn. 'Cookie phiên' sẽ tự động bị xóa khi bạn đóng trình duyệt . 'Cookie liên tục' được lập trình để lưu lại trên máy tính của bạn trong một số tháng. Bạn có thể xóa chúng theo cách thủ công bất kỳ lúc nào trước khi chúng hết hạn.
Làm cách nào để hết hạn cookie trong JavaScript?Xóa Cookie bằng JavaScript
. tài liệu. cookie = "tên người dùng=; hết hạn=Thứ năm, ngày 01 tháng 1 năm 1970 00. 00. 00 UTC; . set the expires parameter to a past date: document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; You should define the cookie path to ensure that you delete the right cookie. |