Friday, December 22, 2017

Giải Thích Sự Khác Nhau Giữa Session và Cookie

sự thực 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 Session và Cookie 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ó dự 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. căn nguyên của sự thiếu hiểu biết căn bản này là 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ẽ ròi hai khái niệm này là điều rất quan yếu vày bạn giúp bạn trong việc tạo ra các áp dụng bảo mật, thí dụ như tránh các chiêu hack session người dùng. Vậy thì không nói dông dài nữa trong bài này mình sẽ giải thích sự khác nhau giữa session và cookie 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 dùng PHP bạn có thể tham khảo bài viết 90% Lập Trình Viên Chưa đích thực Hiểu Về Session và Cookie.


Tình Huống Thực Tế

hiện nay để giúp bạn tưởng tượng một cách dễ dàng chúng ta sẽ coi xét một cảnh huống thực tiễn đó 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 trước nhất 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? trước hết 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à tấm theo quy định của luật tạm trú, theo miinhf có nhẽ để cho cơ quan quản lý nhà nước dễ theo dõi). Sau đó các bước sẽ diễn ra như sau:
viên chức 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 viên chức 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ì viên chức này sẽ lưu thông tin của mỗi phòng khác nhau trên một dòng biệt lập)
Trong quá trình bạn ở khách sạn viên chức này cũng sẽ ghi nhận các thông báo như phòng bạn ở bao lăm 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...
chung cục khi bạn trả phòng thì viên chức 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 báo 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 báo 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 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 ở tỉ 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ỉ dùng một file cookie độc nhất vô nhị cho domain trên.
Session Là Gì

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

mỗi cookie sẽ thườ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 báo liên quan tới người dùng đó. Vừa rồi mình dùng từ bình thường là 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 báo 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ụ duyệt y JavaScript). Tuy nhiên điều này thường không được kiến nghị làm. Lý do là do để đảm bảo bảo mật.

Quay trở lại thí dụ về thuê khách sạn lúc trước và hình dung 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 tất thảy các thông báo 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 nhật thì khách sạn chỉ đưa bạn chìa khoá phòng và tất tật thông báo can hệ khách sạn sẽ quản lý trên cuốn sổ. Điều này cũng diễn ra rưa rứa khi mà chúng ta chỉ lưu rất ít các thông báo trên cookie trình duyệt mà thay vào đó sẽ lưu các thông báo này trên session server.

Đào tạo lập trình viên quôc tế

 

No comments:

Post a Comment