Cookie là gì

Cookie là gì?

Trong bài viết này, mình sẽ hướng dẫn các bạn đi trả lời cho câu hỏi “Cookie là gì?”.

Vậy Cookie là gì?

Cookie là dữ liệu, lưu trữ thông tin của người dùng trong những file text nhỏ trên máy tính của người dùng.

Khi một web server gửi một trang web đến trình duyệt, rồi kết nối bị tắt đi và server quên đi tất cả mọi thứ của người dùng

Cookie được tạo ra để giải quyết vấn đề làm thế nào để nhớ thông tin người dùng

  • Khi một người dùng thăm một trang web, tên của người dùng có thể được lưu trữ trong cookie
  • Lần sau, người dùng cũng thăm trang web đấy, cookie vẫn nhớ tên của người dùng

Cookie sẽ lưu trong cặp tên-giá trị như

username = hocjavascript

Khi trình duyệt gửi một request đến server từ một trang web, cookie của trang sẽ được thêm vào request gửi đi. Bằng cách này server có thể nhớ được các thông tin cần thiết của người dùng

Javascript có thể tạo mới, đọc và xóa cookie cùng với thuộc tính document.cookie

Trong JavaScript, một cookie có thể tạo ra bằng cách

document.cookie = "username=hocjavascript";

Bạn cũng có thể thêm vào ngày hết hạn expires (trong UTC time). Bởi theo mặc định, cookie sẽ bị xóa nếu trình duyệt bị đóng lại

document.cookie = "username=hocjavascript; expires=Thu, 15 Jan 2021 12:00:00 UTC";

Cùng với path parameter, bạn có thể nói cho trình duyệt nơi cookie thuộc về. Bởi theo mặc định, cookie sẽ thuộc trang hiện tại

document.cookie = "username=hocjavascript; expires=Thu, 15 Jan 2021 12:00:00 UTC; path=/";

Trong JavaScript, cookie có thể đọc bằng cách

var x = document.cookie;

document.cookie sẽ trả lại tất cả cookie trong một chuỗi tring kiểu như: cookie1=giá trị; cookie2=giá trị; cookie3=giá trị;

Trong JavaScript, bạn có thể thay đổi một cookie giống như cách mà bạn tạo ra cookie

document.cookie = "username=hocjavascript; expires=Thu, 15 Jan 2021 12:00:00 UTC; path=/";

Vậy là cookie cũ đã bị ghi đè.

Xóa một cookie rất là đơn giản. Chỉ cần xét lại giá trị ngày hết hạn expires về những thời gian trước đấy

document.cookie = "username=; expires=Thu, 15 Jan 2021 12:00:00 UTC";

Thuộc tính document.cookie trông giống như một chuỗi text bình thường. Nhưng nó không hoàn toàn đơn giản như vậy

Nếu bạn lưu giá trị vào cookie, khi bạn lấy thông tin của cookie ra, bạn chỉ đọc được tên-giá trị theo từng cặp

Nếu bạn tạo một mới một cookie, giá trị cookie cũ sẽ không bị ghi đè. Giá trị cookie mới sẽ được thêm vào document.cookie, do đó nếu bạn đọc document.cookie lần nữa thì bạn sẽ nhận được chuỗi string giống như:

cookie1 = giá trị; cookie2 = giá trị;

Nếu bạn muốn tìm giá trị cookie cụ thể, bạn phải viêt một hàm JavaScript để tìm kiếm cho các giá trị cookie trong chuỗi cookie.

Trong ví dụ bên dưới, ta sẽ tạo một cookie lưu tên của khách hàng truy cập

Lần đầu tiên một người dùng truy cập đến trang web, sẽ được yêu cầu điền vào tên của mình, hệ thống sẽ lưu trữ tên này trong cookie.

Sau này, lại người dùng đấy truy cấp đến trang trên, ông lại nhận được thông điệp chào mừng đã quay trở lại.

Trong các ví dụ sau, chúng ta sẽ tạo ra 3 function trong JavaScript

  • Một function để thiết lập giá trị cookie
  • Một function để lấy một giá trị cookie
  • Một function để kiểm tra một giá trị cookie

Ví dụ

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

Tham số của function phía trên là tên của cookie(cname), giá trị của cookie(cvalue) và số ngày cho đến khi cookie hết hạn(exdays)

Sau đây, chúng ta sẽ tạo ra một function để trả về giá trị của một cookie cụ thể

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length,c.length);
        }
    }
    return "";
}

Tham số truyền vào là cname

Tạo một biến name và thêm vào “=” để tìm kiếm

Chia document.cookie dựa trên dấu ; thành một mảng nhiều phần tử và gán mảng đấy cho biến ca

Vòng lặp (i=0; i<ca.length; i++) để đọc mỗi giá trị c = ca[i]

Nếu cookie được tìm thấy (c.indexOf(name)==0), trả về giá trị của cookie (c.substring(name.length,c.length). Nếu cookie không được tìm thấy, trả về “”

Cuối cùng, chúng ta sẽ tạo một function kiểm tra nếu cookie đã được thiết lập

Nếu cookie được thiết lập, nó sẽ hiển thị một lời chào

Nếu cookie không được thiết lập, nó sẽ hiển thị một prompt box, hỏi tên của người dùng, lưu trữ tên của người dùng ở cookie trong 365 ngày, bằng việc gọi function setCookie đã được viết ở trên

function checkCookie() {
    var username=getCookie("username");
    if (username!="") {
        alert("Welcome again " + username);
    } else {
        username = prompt("Please enter your name:", "");
        if (username != "" && username != null) {
            setCookie("username", username, 365);
        }
    }
}

Kết Luận

Bài viết của mình còn đơn giản và chỉ là một phần rất nhỏ trong kho kiến thức về JavaScript, rất mong nhận được sự đóng góp ý kiến của các bạn.

Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Bình luận