Tìm hiểu về Session và Cookie
Bài đăng này đã không được cập nhật trong 3 năm
1. Khái quát về Session và Cookie
Cookie và Session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống, nói cách khác cả hai đều có thể được dùng để lưu trữ tạm thời thông tin của người dùng, và từ đó hệ thống có thể đưa ra những quyết định về quyền hạn hoặc là những tùy chọn riêng tư. Ví dụ, sau khi người dùng đăng nhập, bắt đầu một phiên làm việc thì nó sẽ lưu lại thông tin của người dùng như email, sđt, tên..Mặc dù cả hai đều có điểm chung là lưu trữ dữ liệu nhưng bên trong chúng lại có những điểm khác nhau.
2. Về phần Session
Session là khoảng thời gian người dùng giao tiếp với một ứng dụng. Một Session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi Session sẽ có một định danh (id) khác nhau, và Session được tạo ra và lưu trên server(máy chủ), đồng thời nó sẽ có một đoạn code dữ liệu được lưu trữ ở client. 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 . 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. Session sẽ khác, nó có thể được tạo ra, tồn tại trên server , có thể xuyên từ trang này sang trang khác, chỉ mất đi khi ta xóa nó hoặc hết tuổi thọ (quá thời gian load dữ liệu hoặc thoát khỏi địa chỉ trang-đóng ứng dụng). Giới hạn của 1 phiên làm việc giữa Client và Server là trong suốt khoảng thời gian mà browser đó chưa được đóng. Tức là dù có mở nhiều tab hay nhiều cửa sổ cùng 1 lúc nhưng vẫn cùng 1 trình duyệt (browser) thì đó vẫn tính là 1 phiên làm việc của client đó, trừ trường hợp mở 2 loại trình duyệt khác nhau (vd cả firefox và Chrome) thì khi đó sẽ có 2 phiên làm việc khác nhau. Cụ thể như trong trường hợp Session được ứng dụng vào việc quản lý đăng nhập, đăng xuất của người dùng. Với những tác vụ cần xác nhận là người dùng đã đăng nhập mới sử dụng được, chúng ta cần yêu cầu người dùng đăng nhập vào hệ thống. Nhưng nếu chỉ dùng biến thông thường thì mỗi lần cần thực hiện lại phải đăng nhập vào. Trong khi ấy, nếu dùng Session thì sau khi đăng nhập, 1 biến Session được tạo ra (ví dụ là user_id), thì biến này sẽ tồn tại từ trang này sang trang khác, như thế khi cần thực hiện tác vụ khác cũng cần đăng nhập, ta chỉ cần kiểm tra xem có tồn tại biến user_id này hay chưa là đủ. Nếu tồn tại rồi thì thôi, chưa tồn tại thì hiện ra yêu cầu đăng nhập.
3. Về phía Cookie
Giống Session, Cookie cũng được tạo ra để lưu trữ 1 phiên làm việc nào đó tuy nhiên với Cookie thì nó được tạo ra bởi website và lưu trên chính thiết bị của người dùng, thông tin lưu trong đó sẽ được trình duyệt(browser) gửi ngược lên lại server mỗi khi browser tải 1 trang web từ server. Những thông tin được lưu trữ trong Cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong Cookie, ví dụ thời điểm lần cuối người dùng ghé thăm website, hay là đánh dấu việc login của người dùng... Vì Cookie được tạo ra bởi website mà người dùng truy cập, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 Cookies khác nhau gởi tới server. Ngoài ra, mỗi trình duyệt(browser) có phương thức quản lý và lưu trữ Cookie theo cách của riêng mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận được 2 Cookies khác nhau. Cookie thường được dùng để lưu trữ các thông tin có liên quan đến nhiều phiên làm việc khác nhau (qua nhiều lần đóng và mở session). Vì giao thức HTTPs là giao thức không lưu trạng thái (mỗi khi xử lý xong một yêu cầu từ phía người dùng là nó sẽ ngắt kết nối và có thể kết thúc phiên), nên Cookie sinh ra để làm nhiệm vụ lưu trữ một số biến trạng thái để khắc phục nhược điểm này. Khác với dữ liệu gửi từ form (Post hay Get) thì cookies sẽ được trình duyệt tự động gửi đi theo mỗi lần truy cập lên máy chủ. Trong quá trình làm việc, cookie có thể bị thay đổi giá trị. Cookie sẽ bị vô hiệu hoá nếu cửa sổ trình duyệt điều khiển cookie đóng lại và cookie hết thời gian có hiệu lực. Theo mặc định, thời gian “sống” của cookies là tồn tại cho đến khi cửa sổ trình duyệt sử dụng cookies bị đóng. Tuy nhiên người ta có thể thiết lập tham số thời gian để cookie có thể sống lâu hơn (6 tháng chẳng hạn). Ví dụ như chế độ Remember ID & Password của 1 số trang web.
4. Cookie hay Session?
Sử dụng Session hoặc Cookie là tuỳ vào lựa chọn của Developer, tuy nhiên chúng ta cần quan tâm đến hiểu quả vận hành của hệ thống và độ bảo mật:
- Nếu lưu thông tin người dùng trên trình duyệt sử dụng Cookie thì các thông tin này rất dễ bị đánh cắp bằng thao tác đơn giản là kiểm tra các thông tin được lưu trên thiết bị người dùng. Tuy nhiên nếu sử dụng session để lưu trữ các thông tin cá nhân thì việc đánh cắp các thông tin nhạy cảm sẽ không thể diễn ra một cách dễ dàng vì lúc này chúng được lưu trên máy chủ.
- Trong một số trường hợp Cookie không sử dụng được. Có thể browser đã được thiết lập để không chấp nhận cookie, lúc đó Session lại là lựa chọn tối ưu vì vẫn sử dụng được bằng cách truyền session ID giữa các trang web qua URL, ví dụ: script.php?session=abc123.
- Nên sử dụng Cookie để lưu những thông tin không yêu cầu bảo mật cao, và được sử dụng trong suốt phiên làm việc vì ưu điểm như độ duy trì tốt và tốc độ gửi dữ liệu nhanh.
Kết luận
Trên đây là tổng hợp các vấn đề liên quan đến Session và Cookie, hi vọng bài viết cũng giúp mọi người rõ hơn được phần nào về 2 phương pháp này. Bản thân mình cũng tìm hiểu về Session và Cookie trên nhiều website và thấy mỗi website lại có những ưu điểm và thiếu sót riêng nên mình muốn gộp lại về trong 1 bài viết cụ thể thì tốt hơn, nên bài viết này được tham khảo và tổng hợp lại từ nhiều nguồn (freetuts.net, codehub.vn, QHOnline.Info, nhatthanh.net,...)
All rights reserved