Chính Xác Thì Cookie Được Tạo Ra Như Thế Nào
Session và Cookie không còn là chủ đề mới mẻ gì trong lĩnh vực lập trình web và đặc biệt nếu như được hỏi session và cookies khác nhau như thế nào thì hầu hết mọi người đều có thể trả lời một cách trơn tru. Phân biệt được sự khác biệt giữa session và cookie mặc dù là điều cần thiết nhưng mới chỉ ...
Session và Cookie không còn là chủ đề mới mẻ gì trong lĩnh vực lập trình web và đặc biệt nếu như được hỏi session và cookies khác nhau như thế nào thì hầu hết mọi người đều có thể trả lời một cách trơn tru.
Phân biệt được sự khác biệt giữa session và cookie mặc dù là điều cần thiết nhưng mới chỉ là bước đầu tiên. Để có thể vận dụng được session và cookie trong lập trình web thì chúng ta cần nắm rõ session và cookie được tạo và quản lý ra sao.
Quản Lý Cookie Sử Dụng JavaScript
JavaScript là ngôn ngữ lập trình kịch bản scripting language chạy phổ biến trên môi trường trình duyệt và có thể được sử dụng để tạo mới cookie, chỉnh sửa hoạc xoá bỏ cookie đang có.
Giả sử bạn truy cập vào một trang tại địa chỉ http://localhost/ (tất nhiên bạn hoàn toàn có thể chọn một trang khác như CodeHub.vn) và rồi sau đó chạy đoạn code JavaScript dưới đây:
document.cookie = "username=JohnDoe";
Thì khi đó trình duyệt sẽ tạo mới một cookie với tên là username và giá trị là JohnDoe. Nếu bạn mở Developer Tools rồi click vào tab Application => Bấn chọn Cookies để mở ra danh sách các cookie => chọn http://localhost/ thì bạn sẽ thấy kết quả như sau:
Ngoài ra, bạn cũng có thể thấy cookie này được gán cho domain là localhost và ở địa chỉ URL Path là / với thời hạn (cột Expires/Max-Age) của cookie này là 1969-12-31T23:59:59.000Z. Do mốc thời gian của máy tính được bắt đầu từ 00:00:00 ngày 01/01/1970 nên nếu thời hạn của cookie là vào lúc 23:59:59 ngày 31/12/1956 có nghĩa là cookie sẽ expire khi nào người dùng đóng trình duyệt.
Tất nhiên bạn có thể gán thời hạn khác cho cookie như sau:
document.cookie = "username=John Smith; expires=Thu, 18 Dec 2018 12:00:00 UTC; path=/";
Để thay đổi giá trị của cookie sử dụng JavaScript:
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2018 12:00:00 UTC; path=/";
Để xoá cookie chúng ta vẫn dùng document.cookie với tên và path của cookie trùng với tên và path của cookie muốn xoá nhưng không gán giá trị nào cho cookie này:
document.cookie = "username=; path=/";
Lưu ý: Một số trình duyệt sẽ không xoá cookie nếu như bạn không truyền vào giá trị cho URL path.
Kiểm tra lại danh sách Cookie trên trang sử dụng Developer Tools bạn sẽ thấy cookie ở địa chỉ http://localhost/ đã bị xoá.
Quản Lý Cookie Sử Dụng Response Header
Response header là dữ liệu bổ sung cho nội dung trang web và được web server gửi về cho client. Thông tin của response header sẽ không được hiển thị trên trang, tuy nhiên trình duyệt sẽ dùng các thông tin này cho các mục đích khác như quản lý cookie, xác định kiểu dữ liệu của trang (content type), trạng thái của response (HTTP status code)...
Các ngôn ngữ trên server như PHP hoặc Ruby đều cung cấp các tính năng giúp lập trình viên có thể dễ dàng thiết lập response header. Ngoài ra bạn cũng có thể cấu hình web server (như Apache) để trả về response header nhưng cách này chỉ nên được áp dụng với một số header đặc biệt không thay đổi cho mọi request URL (như tên phần mềm web server, ngôn ngữ lập trình server sử dụng...). Ở bài viết này chúng ta sẽ chỉ giới hạn ở việc tìm hiểu xem http response header được dùng để quản lý cookie như thế nào mà không đi vào tìm hiểu chi tiết cách các ngôn ngữ lập trình cũng như cách cấu hình web server để gửi response header về client như thế nào.
Để quản lý cookie thì chúng ta sẽ sử dụng response header có tên là Set-Cookie. Ví dụ sau sẽ tạo một cookie với tên là username và giá trị là John Doe:
Set-Cookie: username=John Doe
Tương tự như sử dụng JavaScript thì chúng ta cũng có thể quy định thời hạn của cookie (Expires), thời gian tối đa mà cookie có thể tồn tại (Max-Age), URL Path..:
Set-Cookie: username=John Doe; expires=Tue, 18-Jul-2017 11:52:00 GMT; Max-Age=31449600; Path=/
Để xoá cookie với tên và ở một URL Path cho trước:
Set-Cookie: username=John Doe; Path=/
Lưu ý: Một số trình duyệt sẽ không xoá cookie nếu như bạn không truyền vào giá trị cho URL Path.
Kết Luận
Tới đây chúng ta đã hoàn tất việc tìm hiểu cách quản lý cookie trên trang theo hai cách khác nhau đó là thông qua ngôn ngữ JavaScript và thông qua response header. Thông thường cookie chỉ lưu một số thông tin cơ bản và không nhạy cảm của người dùng, chúng ta sẽ không lưu một số các các thông tin nhạy cảm như mật khẩu của người dùng hoặc thông tin ngân hàng... Điều này là bởi vì nếu như bạn lưu các thông tin này trên cookie, chúng sẽ có thể được đọc bởi bất cứ ai sử dụng máy tính của người dùng. Thay vào đó các thông tin nhạy cảm sẽ được lưu trữ trên server thông qua sử dụng session hoặc cơ sở dữ liệu. Ở các bài học tiếp theo chúng ta sẽ tìm hiểu cách lưu trữ thông tin trên server sử dụng session và cách kết hợp giữ session và cookie trong ứng dụng web.