Session Servlet
Session Servlet
Session là một cơ chế giúp lưu trũ thông tin tạm thời giữa các lần truy cập (requests)
của một người dùng cụ thể trong một ứng dụng web. Session thường được dùng để
lưu trũ dữ liệu trong suốt phiên làm việc của người dùng từ khi họ đăng nhập cho đến
khi họ đăng xuất hoặc khi phiên làm việc kết thúc do hết thời gian (timeout)
Cách thức hoạt động của Session
1. Tạo session: Khi một người dùng truy cập vào ứng dụng, một session mới sẽ
được tạo ra. Mỗi session có một ID duy nhất (Session ID) để phân biệt với các
session khác
2. Lưu trữ thông tin: Bạn có thể lưu trữ thông tin tạm thời (như giỏ hàng, lựa chọn
của người dùng, thông tin đăng nhập) vào session. Những dữ liệu này được lưu
phía server, còn phía người dùng (client) chỉ lưu trữ Session ID thông qua cookie
hoặc URL
3. Truy cập lại session: Khi người dùng tiếp tục truy cập các trang khác trong ứng
dụng, session ID của họ được gửi kèm trong mỗi request. Server sẽ sử dụng
session ID này để truy cập thông tin đã lưu trong session và phục vụ người dùng
4. Kết thúc session: Session sẽ tồn tại trong suốt phiên làm việc của người dùng.
Khi người dùng đăng xuất hoặc không tương tác với ứng dụng trong một khoảng
thời gian (timeout), session sẽ bị hủy và các dữ liệu liên quan sẽ không còn nữa
Đặc điểm của Session
Tồn tại trên server: Dữ liệu trong session được lưu trên server, không phải trên
máy khách, giúp bảo mật tốt hơn so với lưu trữ trực tiếp trên trình duyệt
Dùng cho phiên làm việc: Session thường dùng để lưu trữ dữ liệu trong suốt
phiên làm việc ngắn hạn của người dùng. Sau khi người dùng rời khỏi hoặc phiên
kết thúc, dữ liệu sẽ bị mất
Ví dụ về việc sử dụng session
Lưu thông tin đăng nhập: Khi người dùng đăng nhập, thông tin về người dùng
(như username) có thể được lưu vào sesion. Các trang khác sau đó có thể truy
cập session để biết người dùng hiện tại là ai
Giỏ hàng trong trang mua sắm: Khi người dùng thêm sản phẩm vào giỏ hàng,
thông tin giỏ hàng được lưu vào session, và giỏ hàng sẽ được duy trì trong suốt
phiên làm việc
Session giúp quản lý thông tin tạm thời một cách hiệu quả, không cần phải lưu trữ mọi
thông tin người dùng vào cơ sở dữ liệu ngay lập tức
Việc xác định người dùng và liên kết họ với một phiên làm việc không nhất
thiết phải yêu cầu họ đăng nhập hoặc sử dụng kết nối bảo mật ngay từ đầu
Cookie
Cookie là một tệp nhỏ mà server tạo ra và gửi đến trình duyệt web của người dùng khi
họ truy cập một trang web. Tệp cookie này sẽ được lưu trữ trên máy tính hoặc thiết bị
của người dùng và được gửi kèm theo mỗi lần người dùng gửi yêu cầu mới đến cùng
một trang web. Cookie được sử dụng để lưu trữ các thông tin quan trọng giúp duy trì
trạng thái phiên làm việc (session), cá nhân hóa trải nghiệm hoặc theo dõi hành vi
người dùng
Các loại Cookie
1. Session cookie (cookie phiên)
Được sử dụng để lưu trữ thông tin tạm thời trong khi người dùng đang duyệt
trang web
Khi người dùng đóng trình duyệt, session cookie sẽ bị xóa
2. Persistent cookie (cookie lâu dài)
Được lưu trữ trên thiết bị của người dùng trong một khoảng thời gian nhất
định (do server quy định)
Những cookie này vẫn tồn tại ngay cả khi trình duyệt đã đóng
Ví dụ: lưu trữ thông tin lâu dài để lần sau người dùng không phải nhập lại
3. Secure cookie (cookie bảo mật)
Chỉ được gửi qua các kết nối bảo mật, chẳng hạn như HTTPS
Được sử dụng để bảo mật thông tin nhạy cảm
4. Third-party cookie (cookie bên thứ ba)
Được tạo ra bởi các trang web khác ngoài trang web mà người dùng đang
truy cập
Thường được sử dụng để theo dõi hành vi người dùng trên nhiều trang web
(ví dụ: quảng cáo)
Code
URL Rewriting
URL Rewriting là một kỹ thuật được sử dụng trong lập trình web để duy trì thông tin
phiên (session) khi người dùng không cho phép cookie
Leasing
Leasing là một cơ chế thường được sử dụng trong các ứng dụng phân tán để giup
máy chủ quản lý các tài nguyên dành riêng cho từng client. Khi một client kết nối với
máy chủ và yêu cầu sử dụng tài nguyên, máy chủ cấp cho client một "lease" (hợp
động thuê) với một khoảng thời gian nhất định
Cách hoạt động
1. Client yêu cầu lease: Khi một client kết nối với server, nó yêu cầu một lease để
sử dụng tài nguyên. Server cung cấp cho client một lease, cho phép client sử
dụng tài nguyên trong một khoảng thời gian cố định
2. Client gia hạn: Khi thời gian lease gần hết, client phải gửi yêu cầu gia hạn lease
để cho server biết rằng nó vẫn còn "sống" (alive) và vẫn cần tài nguyên
3. Lease hết hạn: Nếu client không gia hạn lease trước khi nó hết hạn, server hiểu
rằng client đã "biến mất" hoặc không còn cần tài nguyên nữa. Khi đó, server có
thể hủy tài nguyên đã dành riêng cho client này, giúp giải phóng bộ nhớ và các tài
nguyên hệ thống khác
Passivation vs Activation
Session Passivation: Đây là quá trình khi một phiên (session) không còn được sử
dụng trong một thời gian dài, và máy chủ quyết định tạm thời lưu phiên này ra ngoài
bộ nhớ (thường là vào cơ sở dữ liệu hoặc một hệ thống lưu trữ ngoài). Điều này giúp
giảm tải bộ nhớ trên máy chủ. Khi phiên bị passivate, dữ liệu của phiên sẽ không còn
nằm trong bộ nhớ RAM của máy chủ mà được "lưu trữ" (passivated).
Session Activation: Đây là quá trình ngược lại. Khi máy chủ nhận một yêu cầu từ
người dùng và phát hiện phiên đã bị passivate, nó sẽ "kích hoạt" (activate) phiên này
bằng cách tải lại dữ liệu từ nơi lưu trữ (cơ sở dữ liệu hoặc hệ thống lưu trữ ngoài) và
đưa trở lại bộ nhớ RAM của máy chủ.