NỘI DUNG BÀI VIẾT
Trong bài viết này, mình sẽ cùng các bạn đi so sánh Session và Cookie để tìm ra điểm khác biệt giữa chúng.
Chúng ta có thể lưu trữ dữ liệu của người dùng thông qua database bên phía server. Nhưng nếu tất cả những thứ liên quan đến người dùng đều lưu vào database ở server thì có thực sự cần thiết không?
Chắc chắn là không rồi, cơ bản là vì nếu chúng ta tống quá nhiều trường vào database thì không những nó lãng phí mà còn ảnh hưởng đến tốc độ của ứng dụng. Bài viết này sẽ giúp bạn phân biệt được 2 cách lưu trữ dữ liệu phổ biến phía client là Session và Cookie.
Session là gì?
Một session là một phiên làm việc. Nó sẽ bắt đầu khi client gửi request đến server và 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 hoặc khi đóng ứng dụng. Giá trị của session được lưu trên ram của server, vì thế nếu ta dùng session vô tội vạ thì ngốn rất nhiều bộ nhớ của server.
Mỗi session sẽ có một SessionID riêng biệt. Khi kết thúc một session và bắt đầu một session mới thì bạn sẽ có một SessionID khác. Giá trị của SessionID sẽ được lưu vào trong cookie, giúp cho server biết session này của client nào.
Về thông tin lưu trữ trên session thì thường chúng ta chỉ nên lưu trữ những thông tin tạm thời ví dụ như số lượng sản phẩm trong giỏ hàng, những nhận xét được viết và lưu dưới dạng bản nháp,…
Cookie là gì?
Cookie cũng được dùng để lưu những thông tin tạm thời nhưng khác biệt ở chỗ là 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 bạn khi bạn truy cập ứng dụng.
Cookie thường được tạo ra khi người dùng truy cập một website, cookie sẽ ghi nhớ thông tin của người dùng như ngôn ngữ, theme của website, các tùy chọn,… Việc lưu trữ những thông tin này còn giúp tăng UX ( trải nghiệm người dùng).
Thử tưởng tượng ngày nào bạn đăng nhập vào một website nhưng mỗi lần đăng nhập website lại hỏi bạn sử dụng ngôn ngữ tiếng Anh hay tiếng Việt thì bạn cảm thấy như thế nào ? Với mình điều này rất phiền, cho nên trường hợp này sử dụng cookie rất là cần thiết.
Các Web Developer có thể cài đặt cookie có khoảng thời gian timeout nhất định. Ví dụ rõ ràng ở đây là nhiều website khi bạn đăng nhập, bạn đóng trình duyệt và vào lại thì bạn vẫn ở phiên đăng nhập (không cần phải đăng nhập lại) nhưng một thời gian sau vào lại thì lúc đó có thông báo bạn cần phải đăng nhập lại là do những thông tin đăng nhập đã hết thời gian lưu trữ (expired).
Tuy nhiên, sử dụng cookie để tăng UX là tốt nhưng không an toàn. Vì dữ liệu cookie được lưu trữ ở phía client nên rất dễ bị sửa đổi và đánh cắp. Nếu các Web Developer không cẩn thận hash thông tin trước khi lưu vào cookie thì tài khoản của người dùng sẽ dễ bị tấn công.
So sánh Session và Cookie
Session | Cookie |
Dữ liệu được lưu ở server | Dữ liệu được lưu ở phía client |
Một session sẽ kết thúc khi bị đóng trình duyệt | Kết thúc tùy vào thời gian Developer cài đặt |
Session phụ thuộc vào Cookie (SessionID được lưu ở cookie) | Không bị phụ thuộc vào session |
Dữ liệu session không dễ bị sửa đổi, tấn công | Dễ bị tấn công do lưu ở phía client |
Lưu ý khi sử dụng Session và Cookie
Đặt giới hạn thời gian cho Session
Với những website chứa nhiều thông tin quan trọng, điển hình là các website ngân hàng, trong thời gian rất ngắn không thao tác ( 5 phút ), bạn phải đăng nhập lại. Tùy thuộc vào loại website mà cài đặt thời gian timeout, tránh cài đặt thời gian timeout quá ngắn cho những website thông thường vì … gây ức chế cho người dùng.
Không lưu những thông tin quan trọng trong session và cookie
Vì bản chất của hai cái này không giống như database nên nó chỉ chứa những thông tin tối quan trọng, những thông tin mà hacker có lấy thì cũng chả làm gì được.
Cookie chỉ nên lưu SessionID
Các dữ liệu khác có thể lưu trong session, vì thế khi cookie được gắn vào header của request lên server. Dựa vào SessionID, server có thể truy ra session và lấy những thông tin trong đó hạn chế tối đa dữ liệu được gửi đi cùng request giúp tăng tốc độ gửi.
Kết luận
Trên đây là khái niệm về Session và Cookie, so sánh Session và Cookie. Hy vọng sẽ giúp ích cho các bạn mới tìm hiểu về lập trình Web. Nếu có câu hỏi hay góp ý thì cứ comment phía dưới nhé. Chúc các bạn học tốt.
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.