Cookie là một mẩu thông tin nhỏ được gửi từ một trang web và được lưu trữ trong trình duyệt web của người dùng khi người dùng duyệt qua trang web đó. Mỗi khi người dùng tải lại trang web đó, trình duyệt sẽ gửi dữ liệu đã lưu trữ đó trở lại trang web hoặc máy chủ để nhận dạng người dùng.
Giới thiệu về Cookies trong Express.js
Trong Express.js, Cookies là một cách để lưu trữ thông tin nhỏ và đơn giản trên máy khách (trình duyệt) và gửi lại máy chủ mỗi lần yêu cầu được thực hiện. Cookies được sử dụng để theo dõi và lưu trữ trạng thái của người dùng, nhận dạng người dùng và lưu trữ các thông tin tạm thời như cài đặt ngôn ngữ, thiết lập ưa thích, giỏ hàng mua hàng và nhiều hơn nữa.
Express.js cung cấp một middleware gọi là “cookie-parser” để xử lý và quản lý Cookies. Middleware này cho phép bạn đọc, ghi, chỉnh sửa và xóa Cookies trong ứng dụng Express.js của mình.
Các tính năng chính của Cookies trong Express.js bao gồm:
- Lưu trữ thông tin trên máy khách: Cookies được lưu trữ trên máy khách dưới dạng văn bản và được gửi lại máy chủ mỗi lần yêu cầu được thực hiện.
- Dễ dàng sử dụng: Với middleware “cookie-parser”, bạn có thể dễ dàng đọc và ghi Cookies bằng cách sử dụng các phương thức của đối tượng Response trong Express.js.
- Theo dõi trạng thái người dùng: Bằng cách sử dụng Cookies, bạn có thể theo dõi trạng thái của người dùng và lưu trữ thông tin về người dùng như ID người dùng, thông tin đăng nhập, cài đặt ưa thích và nhiều hơn nữa.
- Xác thực người dùng: Cookies có thể được sử dụng để xác thực người dùng bằng cách lưu trữ thông tin đăng nhập hoặc token xác thực trong Cookies.
- Thiết lập thời gian sống: Bạn có thể thiết lập thời gian sống cho Cookies để xác định thời điểm Cookies hết hạn và tự động xóa.
Qua đó, Cookies trong Express.js cung cấp một cách tiện lợi và mạnh mẽ để lưu trữ và quản lý thông tin trạng thái và xác thực trong ứng dụng web.
Xem thêm Hướng dẫn Express.js
Sử dụng Cookies trong Express.js
Để sử dụng Cookies trong Express.js, bạn cần làm các bước sau:
- Cài đặt và import các module cần thiết:
- Cài đặt module
cookie-parser
bằng lệnh:npm install cookie-parser
- Import module
cookie-parser
trong file mã nguồn của ứng dụng Express.js:const express = require('express'); const cookieParser = require('cookie-parser');
- Cài đặt module
- Sử dụng middleware
cookie-parser
:- Gọi hàm
cookieParser()
và đưa nó vào trong pipeline của ứng dụng Express bằng cách sử dụngapp.use()
:const app = express(); app.use(cookieParser());
- Gọi hàm
- Đọc và ghi Cookies:
- Để đọc giá trị của Cookies trong một yêu cầu, bạn có thể sử dụng thuộc tính
cookies
của đối tượngreq
:app.get('/', (req, res) => { const cookieValue = req.cookies.cookieName; // Sử dụng giá trị của cookieValue });
- Để ghi giá trị vào Cookies, bạn có thể sử dụng phương thức
res.cookie()
của đối tượngres
:app.get('/', (req, res) => { res.cookie('cookieName', 'cookieValue'); // Ghi giá trị vào cookieName });
- Để đọc giá trị của Cookies trong một yêu cầu, bạn có thể sử dụng thuộc tính
- Xóa Cookies:
- Để xóa Cookies, bạn có thể sử dụng phương thức
res.clearCookie()
của đối tượngres
:app.get('/logout', (req, res) => { res.clearCookie('cookieName'); // Xóa cookieName });
- Để xóa Cookies, bạn có thể sử dụng phương thức
Lưu ý rằng tên của Cookies được đặt trong cookieName
và giá trị của Cookies được đặt trong cookieValue
. Bạn có thể tùy chỉnh tên và giá trị theo nhu cầu của ứng dụng của mình.
Bằng cách sử dụng middleware cookie-parser
và các phương thức liên quan, bạn có thể dễ dàng đọc, ghi và xóa Cookies trong Express.js. Điều này giúp bạn quản lý trạng thái người dùng, xác thực và lưu trữ thông tin liên quan trên máy khách và máy chủ.
Xem thêm Express.js GET Request
Quản lý Cookies trong Express.js
Trong Express.js, bạn có thể quản lý Cookies bằng cách sử dụng các phương thức và thuộc tính của đối tượng Response (res). Dưới đây là một số phương thức quản lý Cookies quan trọng:
- Ghi Cookies: Để ghi giá trị vào Cookies, bạn có thể sử dụng phương thức
res.cookie(name, value, [options])
. Ví dụ:
app.get('/', (req, res) => { res.cookie('username', 'john'); res.cookie('isLoggedIn', true, { maxAge: 3600000, httpOnly: true }); res.send('Cookies have been set.'); });
Trong ví dụ trên, res.cookie()
được sử dụng để ghi hai Cookies: username
và isLoggedIn
. Bạn có thể cung cấp các tùy chọn như maxAge
(thời gian sống của Cookies), httpOnly
(chỉ được truy cập bởi máy chủ) và nhiều tùy chọn khác.
- Đọc Cookies: Để đọc giá trị của Cookies trong một yêu cầu, bạn có thể sử dụng thuộc tính
cookies
của đối tượng Request (req). Ví dụ:
app.get('/', (req, res) => { const username = req.cookies.username; const isLoggedIn = req.cookies.isLoggedIn; res.send(`Username: ${username}, isLoggedIn: ${isLoggedIn}`); });
Trong ví dụ trên, req.cookies
cho phép bạn truy cập đến các giá trị của Cookies đã được gửi bởi máy khách.
- Xóa Cookies: Để xóa Cookies, bạn có thể sử dụng phương thức
res.clearCookie(name, [options])
. Ví dụ:
app.get('/logout', (req, res) => { res.clearCookie('username'); res.clearCookie('isLoggedIn'); res.send('Cookies have been cleared.'); });
Trong ví dụ trên, res.clearCookie()
được sử dụng để xóa Cookies có tên username
và isLoggedIn
.
Bằng cách sử dụng các phương thức và thuộc tính này, bạn có thể quản lý Cookies trong Express.js. Hãy cẩn thận khi lưu trữ thông tin nhạy cảm trong Cookies và áp dụng các biện pháp bảo mật phù hợp như mã hóa hoặc ký tự hóa để đảm bảo tính toàn vẹn và an toàn của dữ liệu người dùng.
Xem thêm Express.js Routing
Bảo mật và an ninh cho Cookies trong Express.js
Để đảm bảo bảo mật và an ninh cho Cookies trong Express.js, bạn có thể áp dụng các biện pháp sau:
- Sử dụng tùy chọn Secure: Để chỉ cho trình duyệt chỉ gửi Cookies qua kết nối HTTPS bảo mật, hãy thiết lập tùy chọn
secure
trongres.cookie()
vàres.clearCookie()
:
res.cookie('cookieName', 'cookieValue', { secure: true }); res.clearCookie('cookieName', { secure: true });
Lưu ý rằng để sử dụng tùy chọn Secure, ứng dụng của bạn cần chạy trên kết nối HTTPS.
- Sử dụng tùy chọn HttpOnly: Để chỉ cho trình duyệt không cho phép JavaScript truy cập vào Cookies, hãy thiết lập tùy chọn
httpOnly
trongres.cookie()
:
res.cookie('cookieName', 'cookieValue', { httpOnly: true });
Điều này giúp ngăn chặn các cuộc tấn công cross-site scripting (XSS) thông qua mã JavaScript.
- Mã hóa dữ liệu Cookies: Đối với các thông tin nhạy cảm trong Cookies, bạn có thể mã hóa dữ liệu trước khi ghi vào Cookies và giải mã nó khi đọc. Bằng cách này, người khác sẽ không thể đọc được thông tin trong Cookies ngay cả khi có truy cập vào nó.
- Xác thực và kiểm tra người dùng: Khi sử dụng Cookies để xác thực người dùng, hãy đảm bảo rằng bạn kiểm tra và xác minh tính hợp lệ của Cookies và thông tin người dùng liên quan. Điều này giúp ngăn chặn cuộc tấn công giả mạo và xâm nhập.
- Thiết lập thời gian sống hợp lý: Xác định thời gian sống (expiry) của Cookies sao cho phù hợp với yêu cầu ứng dụng của bạn. Nếu cần, hãy đảm bảo rằng Cookies được tự động xóa khi hết hạn hoặc người dùng đăng xuất.
- Kiểm tra và kiểm soát Cookies: Kiểm tra các thiết lập và tùy chọn liên quan đến Cookies để đảm bảo rằng chúng tuân thủ các quy tắc bảo mật và an ninh. Đồng thời, hạn chế việc sử dụng quá nhiều Cookies để tránh tình trạng quá tải và tiềm ẩn các lỗ hổng bảo mật.
Bằng cách áp dụng những biện pháp bảo mật và an ninh trên, bạn có thể tăng cường sự bảo mật của Cookies trong ứng dụng Express.js của mình và bảo vệ thông tin người dùng khỏi các cuộc tấn công và lợi dụng.
Xem thêm Express.js Middleware
Thực hành: Ví dụ sử dụng Cookies trong Express.js
Dưới đây là một ví dụ thực hành sử dụng Cookies trong Express.js:
- Cài đặt các module cần thiết:
- Mở terminal và chạy lệnh sau để cài đặt Express và cookie-parser:
npm install express cookie-parser
- Mở terminal và chạy lệnh sau để cài đặt Express và cookie-parser:
- Tạo một file JavaScript mới (ví dụ:
app.js
) và nhập các module cần thiết:
const express = require('express'); const cookieParser = require('cookie-parser');
- Khởi tạo ứng dụng Express và sử dụng middleware cookie-parser:
const app = express(); app.use(cookieParser());
- Định nghĩa các tuyến đường và xử lý yêu cầu:
// Tuyến đường ghi Cookies app.get('/set-cookie', (req, res) => { res.cookie('username', 'john', { maxAge: 3600000 }); res.cookie('isLoggedIn', true, { httpOnly: true }); res.send('Cookies have been set.'); }); // Tuyến đường đọc Cookies app.get('/read-cookie', (req, res) => { const username = req.cookies.username; const isLoggedIn = req.cookies.isLoggedIn; res.send(`Username: ${username}, isLoggedIn: ${isLoggedIn}`); }); // Tuyến đường xóa Cookies app.get('/clear-cookie', (req, res) => { res.clearCookie('username'); res.clearCookie('isLoggedIn'); res.send('Cookies have been cleared.'); }); // Khởi động máy chủ app.listen(3000, () => { console.log('Server is running on port 3000.'); });
- Khởi chạy ứng dụng:
- Mở terminal và chạy lệnh sau:Copy code
node app.js
- Truy cập vào http://localhost:3000 để kiểm tra và thực hiện các yêu cầu tương ứng.
- Mở terminal và chạy lệnh sau:Copy code
Trong ví dụ trên, chúng ta đã tạo ba tuyến đường:
/set-cookie
: Ghi hai Cookies làusername
vàisLoggedIn
./read-cookie
: Đọc và hiển thị giá trị của Cookies./clear-cookie
: Xóa hai Cookies đã ghi.
Bạn có thể tùy chỉnh và mở rộng ví dụ này để phù hợp với yêu cầu cụ thể của ứng dụng của mình.
Ví dụ về cookie Express.js
Xem thêm View trong Express.js