+6

Session, cookie và ứng dụng vào bài toán login

Trong lập trình web, Session và Cookie là 2 khái niệm vô cùng quan trọng, được ứng dụng ở hầu hết các website. Bài viết này của mình sẽ giúp mọi người tìm hiểu ở mức cơ bản về 2 khái niệm này cũng như cách áp dụng trong bài toán thực tế.

1. Session

Khái niệm

  • Session được dịch là một phiên làm việc

  • Nó là một kĩ thuật lưu dữ liệu dưới dạng key, value, lưu các thông tin phiên làm việc của người dùng (tên, id, giỏ hàng ...). Session cho phép bạn lưu trữ dữ liệu trên server, độc lập hoàn toàn với client, vì vậy dữ liệu sẽ an toàn và đáng tin cậy hơn rất nhiều

  • Nếu như với các biến thông thường, khi trang web bất kỳ bắt đầu thực thi, biến đó sẽ được cấp phát bộ nhớ, lưu giá trị và thu hồi vùng nhớ sau khi trang kết thúc. thì session là cách đơn giản để lưu trữ 1 biến và khiến biến đó có thể tồn tại từ trang này sang trang khác. Và nó chỉ mất đi khi người dùng tắt trình duyệt

Nguyên tắc hoạt động

  • Một session bắt đầu khi client gửi request đến server, nó tồn tại xuyên suốt từ trang này đến trang khác trong ứng dụng và chỉ kết thúc khi hết thời gian timeout hoặc khi bạn đóng ứng dụng

  • Session khi sinh ra được lưu trên 1 file có tên dài dòng, khó đoán và được tạo ngẫu nhiên là session id trên máy chủ, và đồng thời ở máy client cũng có 1 cookie sinh ra có nội dung (hay giá trị) đúng như session id (để có thể so khớp session nào là của client nào).

Nơi lưu trữ

  • Giá trị của những session được lưu trên trên máy chủ

  • Ví dụ khi bạn đăng nhập vào một trang web và đăng nhập với tài khoản đã đăng ký trước đó. Server sau khi xác thực được thông tin bạn cung cấp là đúng thì nó sẽ sinh ra một tập tin chứa dữ liệu cần lưu trữ của người dùng.

  • Có thể tùy ý quyết định xem nên lưu trữ những thông tin nào vào Session. nếu bạn dùng session một cách vô tội vạ thì sẽ khiến cho máy chủ phải lưu rất nhiều, đặc biệt nếu ứng dụng có hàng triệu người dùng, thông thường chúng ta chỉ nên lưu những thông tin tạm thời trong session ví dụ như số lượng sản phẩm người dùng đã thêm vào giỏ nhưng chưa mua, hay những nhật xét đang được viết và lưu dưới dạng nháp nhưng chưa gửi đi

2. Cookie

Khái niệm

  • Cũng là 1 cách để lưu trữ những thông tin tạm thời, được lưu dữ liệu dưới dạng key - value, có thời gian tồn tại (Do phía nhà phát triển quy định). Tệp tin cookie sẽ được truyền từ server tới browser và được lưu trữ trên máy tính của người dùng khi người dùng truy cập vào ứng dụng. Mỗi khi người dùng tải ứng dụng, trình duyệt sẽ gửi cookie để thông báo cho ứng dụng về hoạt động trước đó của bạn.

  • Cookie có thể sửa đổi và đánh cắp, thấp chí có thể lợi dụng điều này để tấn công website của bạn vì vậy đừng bao giờ lưu trữ những thông tin quan trọng, yêu cầu tính bảo mật cao vào cookie.

Nguyên tắc hoạt động

Bước 1: Người dùng truy cập vào trang web lần đầu tiên, header mà trình duyệt gửi lên sẽ có dạng sau:

GET /index.html HTTP/1.1
Host: www.example.org

Bước 2: Server không tìm thấy cookie trên request người dùng, chính vì vậy nó sẽ response cookie bằng cách gửi lại header như sau:

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: theme=light
Set-Cookie: sessionToken=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT
Set-Cookie: status=active; Max-Age: 300
Set-Cookie: name=tien; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Max-Age: 300

Bước 3: Trình duyệt sẽ lưu lại giá trị của cookie dựa trên header của server trả về.

Nơi lưu trữ

biến cookie lưu trên những tập tin do server gửi tới, các tập tin được lưu trữ trên thư mục trình duyệt hoặc thư mục dữ liệu chương trình của máy tính người dùng.

3. Ứng dụng trong bài toán login

Khi user login thì server sẽ sinh ra session, lưu ở server ( trong memory của ram hoặc save file, tuỳ). Đồng thời server sẽ set header trên response trả về client, mục đích của header này là lưu cookie ở phía client. Trong cookie sẽ có session_id tương ứng với session ở server. Nhờ đó mà server biết được ai thực hiện các request ở lần tiếp theo.

  • Trường hợp 1: User ko check vào remember me thì khi server set header sẽ KHÔNG bao gồm expired date cho cookie. Khi browser nhận dc lệnh tạo cookie mà ko có expired date, thì nó hiểu đây là "session cookie" - đặc điểm của loại cookie này là khi user tắt browser thì nó xoá cookie này, lúc đó user phải đăng nhập lại.

  • Trường hợp 2: User check vào remember me thì server khi set header SẼ BAO GỒM expired date ( vd 1 năm sau) thi khi user tắt browser cookie này vẫn còn. Khi cookie còn hạn thì user còn đăng nhập hoài.

Chú ý: Session_id là định danh (tên) được đặt cho file lưu trữ khi session được sinh ra, là một tên dài dòng, khó đoán và được tạo ngẫu nhiên.

4. Kết luận

Trên đây mình đã giới thiệu cơ bản về khái niệm, nguyên tắc hoạt động, nơi lưu trữ của session cookie và ứng dụng của Session và Cookies trong bài toán login. Mong các bạn có cái nhìn tổng quát và nắm bắt sơ lược về nó.

Cảm ơn các bạn đã theo dõi bài viết.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.