Giải Thích Sự Khác Nhau Giữa Session và Cookie [Dành Cho Người Không Rành Về Lập Trình]

Sự thật là nhiều bạn khi gặp phải câu hỏi phỏng vấn hãy cho biết sự khác biệt giữa SessionCookie thì cảm thấy rất bối rối. Mấy ngày trước ở trên công ty mình có tham gia phỏng vấn một bạn sinh viên mới ra trường cho vị trí Middle PHP Developer thì phát hiện ra dù bạn ứng viên này dù đã có kinh nghiệm làm việc với một số framework PHP rồi nhưng vẫn chưa hiểu rõ sự khác biệt giữa Session và Cookie. Nguyên nhân của sự thiếu hiểu biết cơ bản này là bởi vì việc xử lý Session và Cookie đều đã được các framework này lo cho chúng ta rồi.

Tuy nhiên phân biệt rạch ròi hai khái niệm này là điều rất quan trọng bởi vì bạn giúp bạn trong việc tạo ra các ứng dụng bảo mật, ví dụ như tránh các chiêu hack session người dùng. Vậy thì không nói dài dòng nữa trong bài này mình sẽ giải thích sự khác nhau giữa sessioncookie theo một cách đơn giản nhất.

Lưu ý: Sau khi đọc bài viết này nếu bạn muốn tìm hiểu về cách triển khai cookie và session trên server sử dụng PHP bạn có thể tham khảo bài viết 90% Lập Trình Viên Chưa Thực Sự Hiểu Về Session và Cookie.

Tình Huống Thực Tế

Bây giờ để giúp bạn hình dung một cách dễ dàng chúng ta sẽ xem xét một tình huống thực tế đó là khi bạn cùng bạn bè đi du lịch bụi. Sau nhiều giờ chạy xe bạn đã tới một điểm dừng đầu tiên và quyết định sẽ thuê một khách sạn để ở. Lúc này bạn cần làm những thủ tục nào khi tới khách sạn? Đầu tiên thì bạn phải đưa nhân viên giấy CMND của bạn cho nhân viên khách sạn (điều này là bắt buộc theo quy định của luật lưu trú, theo miinhf có lẽ để cho cơ quan quản lý nhà nước dễ theo dõi). Sau đó các bước sẽ diễn ra như sau:

  • Nhân viên này sau đó sẽ đưa bạn chìa khoá một phòng còn trống và trên chìa khoá đó có ghi số phòng.
  • Tiếp theo nhân viên này sẽ lưu lại các thông tin về giờ giấc bạn vô K/S vào một cuốn sổ (trong cùng một ngày thì nhân viên này sẽ lưu thông tin của mỗi phòng khác nhau trên một dòng riêng biệt)
  • Trong quá trình bạn ở khách sạn nhân viên này cũng sẽ ghi nhận các thông tin như phòng bạn ở bao nhiêu người, bạn có muốn ăn sáng, bạn cần dịch vụ giặt đồ, hay cùng như thời điểm bạn trả phòng là khi nào...
  • Cuối cùng khi bạn trả phòng thì nhân viên sẽ hỏi số phòng của bạn để dò lại các thông tin trên.

Khách sạn sẽ sử dụng thông tin trên cuốn sổ để quản lý (tìm kiếm, cập nhật) thông tin của từng phòng. Tuy nhiên để khách sạn có thể xác định khách nào ở phòng nào thì cần có chìa khoá phòng.

Ở trên chìa khoá phòngđóng vai trò như một cookie, khách sạn đóng vai tròng là một server, các dòng lưu thông tin trên cuốn sổ giống như từng file session chứa thông tin của mỗi cookie (phòng) và cả cuốn sổ đóng vai trò như là thư mục chứa các file session.

Cookie Là Gì

Theo định nghĩa thì cookie là một mẩu thông tin nhỏ được lưu trừ trên trình duyệt người dùng. Đây là một file nhỏ được trình duyệt lưu trữ trên máy tính của bạn. Trên cùng một trình duyệt mỗi một domain khác nhau sẽ có một cookie khác nhau. Ở đây một domain giống như một khách sạn ở ví dụ trên.

Bạn cũng cần lưu ý rằng khi bạn truy cập một domain trên nhiều tab khác nhau của cùng một trình duyệt thì trình duyệt này cũng chỉ sử dụng một file cookie duy nhất cho domain trên.

Session Là Gì

Session là một tập tin nhỏ được lưu trữ trên server, mỗi một file session sẽ tương ứng với một file cookie.

Mỗi một cookie sẽ thường tương ứng với một người dùng và bên trong từng file session này sẽ chứa các thông tin liên quan tới người dùng đó. Vừa rồi mình sử dụng từ thông thường là bởi vì một người dùng có thể sử dụng hai trình duyệt khác nhau như Firefox hay Chrome trên một máy để truy cập vào cùng một địa chỉ trang web. Lúc này sẽ có hai cookie trên hai trình duyệt (và do đó sẽ có 2 session được tạo ra trên server) cho cùng một người dùng.

Tại Sao Không Lưu Thông Tin Người Dùng Trên Cookie

Bạn hoàn toàn có thể lưu các thông tin của người dùng trên cookie (ví dụ thông qua JavaScript). Tuy nhiên điều này thường không được kiến nghị làm. Lý do là bởi vì để đảm bảo bảo mật.

Quay trở lại ví dụ về thuê khách sạn lúc trước và tưởng tượng nếu thay vì nhân viên trên lưu trữ thông tin về phòng bạn thuê trong cuốn sổ mà anh ta quản lý thì anh ta lại đưa bạn một tờ giấy trên đó có các thông tin này và để bạn giữa nó. Lúc này có hai khả năng xảy ra:

  • Bạn có thể làm mất tờ giấy này và khách sạn có khả năng không lấy lại được toàn bộ các thông tin liên quan về phòng bạn thuê
  • Bạn có thể giả mạo cá thông tin tên tờ giấy mà nhân viên đưa cho bạn

Do đó thông thường thì khách sạn chỉ đưa bạn chìa khoá phòng và toàn bộ thông tin liên quan khách sạn sẽ quản lý trên cuốn sổ. Điều này cũng diễn ra tương tự khi mà chúng ta chỉ lưu rất ít các thông tin trên cookie trình duyệt mà thay vào đó sẽ lưu các thông tin này trên session server.

Bài Viết Liên Quan