- vừa được xem lúc

[NodeJS] Bài 7 - Session & Cookie

0 0 14

Người đăng: Semi Art

Theo Viblo Asia

Trong bài viết này, chúng ta sẽ gặp gỡ mội khái niệm mới có tên gọi là session - được sử dụng trong lập trình ứng dụng giao tiếp qua mạng máy tính nói chung. Và một công cụ tiện ích có tên gọi là cookie - giúp phần mềm server mà chúng ta đang lập trình có thể tạm thời ghi nhớ thiết bị của người dùng.

Session là cái gì?

Khái niệm session - tạm dịch là phiên đối thoại - cũng được xuất phát từ cuộc sống thường nhật hàng ngày của chúng ta giống như những khái niệm khác mà chúng ta đã được gặp trong hành trình tự học lập trình web. Ví dụ như khi bạn gặp trực tiếp và nói chuyện với một đối tác về một chủ đề nào đó trong công việc, quãng thời gian tính từ khi bạn và đối tác bắt đầu cuộc thảo luận cho đến khi cả hai tạm dừng nói chuyện - được gọi là một session - hay một phiên đối thoại.

Và khái niệm session trong giao tiếp giữa các phần mềm máy tính cũng không có gì khác biệt. Ví dụ như khi một người dùng mở trình duyệt và truy cập tới một địa chỉ web, sau đó di chuyển qua lại giữa các trang đơn trong website này; Các yêu cầu request được gửi tới server và các lượt phản hồi response cũng giống như các câu nói trao đổi qua lại trong một phiên đối thoại. Trong trường hợp này một session thường được tính kể từ thời điểm yêu cầu đầu tiên được gửi tới server cho đến khi người dùng đóng tab web hiện tại.

Một session như trên được gọi là page session - có nghĩa là phiên đối thoại được tính bằng thời gian tồn tại của một trang web trong không gian của trình duyệt. Và các phiên đối thoại page session được trình duyệt web sử dụng để làm phương thức xác định khoảng thời gian hiệu dụng cho một số tính năng liên quan. Ví dụ như code JavaScript ở phía client-side sẽ có thể lưu trữ thông tin trong bộ nhớ đệm window.sessionStorage để sử dụng trong suốt thời gian tồn tại của một page session. Những thông tin được lưu trữ trong sessionStorage sẽ tự động được xóa ngay sau khi người dùng đóng tab web.

Session tự quản lý

Giống với cách mà các trình duyệt web định nghĩa page session và sử dụng để quản lý tính năng lưu trữ dữ liệu tạm thời window.sessionStorage; Ở phía server-side, chúng ta cũng có thể tự định nghĩa những kiểu session khác nhằm mục đích quản lý những tính năng nhất định của phần mềm server mà chúng ta đang xây dựng.

Ví dụ điển hình là những tính năng như thêm mới, chỉnh sửa, và xóa bài viết trên một trang blog cần được giới hạn quyền sử dụng và chỉ được cho phép thực hiện trong các session đối thoại với người quản trị blog admin. Những yêu cầu tương tự khi được gửi tới server ở ngoài khung thời gian hiệu dụng của admin session sẽ không có hiệu lực và cần được chuyển hướng tới giao diện đăng nhập tài khoản quản trị.

Kiểu session này thường được gọi chung là login session - hay phiên đăng nhập - và được tính từ thời điểm một người dùng thực hiện xong chức năng đăng nhập tài khoản vào một trang web, cho đến khi tài khoản được đăng xuất bởi thao tác người dùng hoặc bởi code quản lý của server.

Quản lý bằng Cookie

Như chúng ta đã thảo luận ở phía trên thì việc quản lý session về cơ bản là quản lý các lượt truyền tải thông tin yêu cầu request và phản hồi response. Một yêu cầu mở giao diện chỉnh sửa một bài viết được gửi tới trong khung thời gian của một login session cần được xử lý phản hồi khác với một yêu cầu tương tự được gửi tới ngoài khung thời gian của login session.

Việc xác định một yêu cầu nhận được tại server có ở trong một session nào đó hay không thì có khá nhiều cách thức. Tuy nhiên cách đơn giản nhất là chúng ta có thể gắn một mảnh thông tin nhỏ để đánh dấu tất cả các yêu cầu được trình duyệt web gửi tới sau khi người dùng thực hiện đăng nhập tài khoản. Đây là một tiện ích convention được sử dụng chung trong lập trình phần mềm giao tiếp qua mạng máy tính - có tên gọi là cookie.

Một cookie là một mảnh thông tin nhỏ, được tạo ra bởi một phần mềm này, và được lưu lại bởi một phần mềm kia. Mỗi khi phần mềm kia gửi bất kỳ một thông điệp gì đó tới phần mềm này thì sẽ phải gửi kèm lại nguyên cả cái cookie đã lưu. Như vậy phần mềm này sẽ có thể nhận biết được những yêu cầu được gửi tới bởi phần mềm kia trong số 1001 yêu cầu được gửi tới từ các phần mềm khác nữa. _Một người đang học lập trình

Trong lập trình web nói riêng, các trình duyệt web và các môi trường vận hành phần mềm server đều cung cấp sẵn những phương thức để hỗ trợ chúng ta tạo ra và gắn các cookie như vậy vào các lượt truyền tải thông tin yêu cầu request và phản hồi response. Và đây là cách mà chúng ta tạo ra một cookie bằng NodeJS để trình duyệt web có thể lưu lại và gắn vào mỗi yêu cầu gửi tới server sau đó:

const loginHandler = function(request, response) { // Kiểm tra thông tin đăng nhập ... // Tạo cookie và chuyển cho trình duyệt web lưu lại response.setHeader("Cookie", "session=admin; HttpOnly");
}; const logoutHandler = function(request, response) { // Thay đổi cookie và chuyển cho trình duyệt web lưu lại response.setHeader("Cookie", "session=normal; HttpOnly");
};

Trong code ví dụ trên, một mảnh thông tin cookie có dạng key=value tự định nghĩa đang được gắn vào response và chuyển cho trình duyệt web. Chúng ta cũng có thể tạo nội dung cho một cookie với nhiều cặp key=value phân tách với nhau bởi các dấu chấm phẩy ;.

Bên cạnh các cặp key=value tự định nghĩa, các cookie còn có các thuộc tính chung được quy định sẵn để tùy chỉnh một số yếu tố liên quan tới cookie đó. Trong ví dụ ở trên thì thuộc tính HttpOnly sẽ khiến cookie này được ẩn khỏi bề mặt sử dụng của code JavaScript client-side và chỉ có thể được truy xuất hay chỉnh sửa bởi server.

Thao tác gắn cookie này vào mỗi yêu cầu gửi tới server sau đó sẽ được trình duyệt web tự động xử lý nếu như người dùng chấp nhận lưu cookie khi có thông báo hiển thị bởi trình duyệt.

Để tìm hiểu thêm về các thuộc tính khác của cookie trong môi trường web, bạn có thể sử dụng liên kết sau: HTTP Cookie - MDN

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 136

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 117

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 93

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 229