Tôi có thể thay đổi giá trị cookie bằng JavaScript không?
Nếu chúng ta muốn tạo, cập nhật (thay đổi) hoặc xóa cookie trong JavaScript, chúng ta phải thực hiện một số thao tác rất đơn giản như tôi mô tả bên dưới. Đây là tình huống khá phổ biến trong quá trình phát triển JavaScript hàng ngày khi chúng ta muốn thực hiện một số thao tác dựa trên cookie. Cookies được sử dụng để lưu trữ các mẩu thông tin dạng văn bản nhỏ và có thời hạn sử dụng. Sau ngày hôm đó, cookie sẽ bị xóa khỏi bộ nhớ của trình duyệt. Điều này rất tốt để lưu trữ trong cookie và sử dụng các thao tác tạo, thay đổi, xóa và xóa, trong e. g. biểu mẫu, giỏ mua hàng, v.v. Show
Mục lục
Bước 1 – Chuẩn bị ngày hết hạn cho cookieTôi thường sử dụng chức năng dưới đây để xác định ngày hết hạn của cookie. Hàm lấy thời gian tính bằng phút làm đối số, thêm nó vào thời gian hiện tại và trả về ngày và giờ hết hạn (thời gian hiện tại + phút tính từ đối số) function setTimeForCookies (minutes) { var now = new Date(); var time = now.getTime(); time += minutes * 60 * 1000; now.setTime(time); return now; } Bước 2 – Tạo cookieTôi tạo một cookie theo cách rất phổ biến, như được trình bày bên dưới. Để đặt tham số “hết hạn”, tôi sử dụng chức năng trên document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/"; Bước 3 – Cập nhật ngày hết hạn cookieNhư mình đã đề cập ở đầu bài, để cập nhật ngày hết hạn chúng ta cũng làm tương tự như bước 2, với ngày mới. Vì vậy, nói chung, nó không cập nhật cookie mà viết lại nó. Theo cách tương tự, chúng tôi có thể cập nhật/viết lại giá trị cookie document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/"; Bước 4 – xóa cookieĐể xóa cookie, chúng tôi phải cập nhật ngày hết hạn, nhưng chúng tôi phải đặt ngày ở đâu đó trong QUÁ KHỨ. Sau đó, cookie tự động hết hạn và sẽ bị trình duyệt xóa. Cách tốt nhất là đặt ngày. 1 tháng 1 năm 1970 – tất nhiên là đúng định dạng. “Thu, 01 Jan 1970 00. 00. 01 GMT” (thời gian unix) 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 tiêu đề HTTP 2 phản hồi. Sau đó, trình duyệt sẽ tự động thêm chúng vào (hầu hết) mọi yêu cầu tớ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 Đọc từ tài liệu. bánh quyTrình duyệt của bạn có lưu trữ bất kỳ cookie nào từ trang web này không? ________số 8 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 tôi 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 Ghi vào tài liệu. bánh quyChú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 document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";64 và giá trị document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";65
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 của document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";66 không ghi đè lên tất cả các cookie. Nó chỉ đặt cookie đã đề cập document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";64 Về 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 document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";68 tích hợp document.cookie = "cookieName=This is a cookie value; expires=" + setTimeForCookies(60) + "; path=/";6 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 document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";51, được phân cách bởi 9, như thế nàydocument.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";5 con đường
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 document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";54, nó sẽ hiển thị ở các trang document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";55 và document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";56, nhưng không hiển thị ở document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";57 hoặc document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";58 Thông thường, chúng ta nên đặt document.cookie = "cookieName=This is a NEW cookie value; expires=" + setTimeForCookies(120) + "; path=/";59 vào thư mục gốc. 50 để làm cho cookie có thể truy cập được từ tất cả các trang của trang webmiền
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, 52 sẽ không bao giờ nhận được cookie được đặt tại 53Đó 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ư 54 5…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ư 54 nhận cookie được đặt tại 53, điều đó là có thểĐể điều đó xảy ra, khi đặt cookie ở 53, chúng ta nên đặt rõ ràng tùy chọn 58 cho tên miền gốc. 51. Sau đó, tất cả các tên miền phụ sẽ thấy cookie đóVí dụ 6Vì lý do lịch sử, 60 (có dấu chấm trước 53) 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 58 cho phép tạo cookie có thể truy cập được tại các tên miền phụhết hạn, tuổi tối đaTheo 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 63 hoặc 64
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 66 để lấy nó. Chẳng hạn, chúng tôi có thể đặt cookie hết hạn sau 1 ngày 4Nếu chúng tôi đặt 63 thành một ngày trong quá khứ, cookie sẽ bị xóa
Đó là một giải pháp thay thế cho 63 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 8chắc chắn
Cookie chỉ nên được chuyển qua HTTPS Theo mặc định, nếu chúng tôi đặt cookie ở 41, thì nó cũng xuất hiện ở 42 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 42, thì nó sẽ không xuất hiện khi cùng một trang được truy cập bằng HTTP, như 41. 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ờ 40 là điều phù hợp 5cùng địa điểmĐó là một thuộc tính bảo mật khác 46. 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 tấn công XSRFHãy tưởng tượng, bạn đã đăng nhập vào trang web 47. Đó 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 47 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 49. Trang web đó có mã JavaScript gửi biểu mẫu 80 đến 47 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 47, ngay cả khi biểu mẫu được gửi từ 49. 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 47 đề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 47 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 Nhập tùy chọn cùng trang web cookieTùy chọn cookie 46 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ệ xsrf”Nó có hai giá trị có thể
Cookie có 87 không bao giờ được gửi nếu người dùng đến từ bên ngoài cùng một trangNó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ừ 49 hoặc thực hiện bất kỳ thao tác nào bắt nguồn từ một miền khác, cookie sẽ không được gửiNếu cookie xác thực có tùy chọn 46, thì cuộc tấn công XSRF không có cơ hội thành công, vì gửi từ 49 không có cookie. Vì vậy, 47 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 hoạt động đến từ 47 mới gửi cookie 46, e. g. gửi biểu mẫu từ một trang khác tại 47Mặ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 47, chẳng hạn như từ ghi chú của chính họ, họ sẽ ngạc nhiên rằng 47 không nhận ra họ. Thật vậy, cookie 87 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 cho các hoạt động thay đổi dữ liệu với 87. 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 để gửi cookie thứ hai
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ư 12, 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ệCookie 11 được gửi nếu cả hai điều kiện này đều đúng
Vì vậy, những gì 11 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 11 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, 46 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 46 để 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 46 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 xsrfhttpOnlyTù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ệruột thừa. chức năng cookieĐâ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ù getCookie(tên)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 09 đã cho 1Ở đâ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ãsetCookie(tên, giá trị, tùy chọn)Đặt 09 của cookie thành 15 đã cho với 50 theo mặc định (có thể được sửa đổi để thêm các giá trị mặc định khác) 0xóaCookie(tên)Để 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 ruột thừa. Cookie của bên thứ baCookie đượ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 một 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 ruột thừa. GDPRChủ đề 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 Làm cách nào để cập nhật giá trị cookie trong js?Cách duy nhất để cập nhật hoặc sửa đổi cookie là tạo một cookie khác có cùng tên và đường dẫn như cookie hiện có . Tạo một cookie có cùng tên nhưng với một đường dẫn khác thì đường dẫn hiện có sẽ thêm một cookie bổ sung.
Tôi có thể thay đổi giá trị của cookie không?Bạn không thể trực tiếp sửa đổi cookie . Thay vào đó, việc thay đổi cookie bao gồm việc tạo một cookie mới với các giá trị mới và sau đó gửi cookie tới trình duyệt để ghi đè lên phiên bản cũ trên máy khách. Cookie nhận được trong yêu cầu có thể có các thuộc tính khác với cookie được gửi tới trình duyệt trước đó.
Chúng tôi có thể thao tác với cookie bằng JavaScript không?JavaScript cũng có thể thao tác cookie bằng cách sử dụng thuộc tính cookie của đối tượng Tài liệu . JavaScript có thể đọc, tạo, sửa đổi và xóa các cookie áp dụng cho trang web hiện tại.
Làm cách nào để nhận giá trị cookie cụ thể trong JavaScript?để truy xuất giá trị cookie cụ thể, chúng ta chỉ cần lấy chuỗi sau "; {name}=" và trước next ";". Trước khi chúng tôi thực hiện bất kỳ quá trình xử lý nào, chúng tôi thêm chuỗi cookie vào trước "; ", sao cho mọi tên cookie, kể cả tên đầu tiên, được kèm theo ";" và "=". "; {tên}={giá trị}; {tên}={giá trị};. " |