Session là gì?
Một session được hiểu như một phiên làm việc giữa client và server, bắt đầu khi có request từ client, kết thúc khi người dùng đóng ứng dụng hoặc khi session hết thời gian timeout. Cũng giống như Cookie, Session được dùng để lưu trữ thông tin liên quan đến người dùng, nhưng thay vì được lưu trên máy client, các biến session được lưu trên máy server. Mỗi session có một định danh duy nhất (SessionID).
Cách sử dụng Session trong ASP.NET
Cách tạo và sử dụng session trong ASP.NET rất đơn giản. Ví dụ:
Session ["UserID"] = "101";
if(Session["UserID"] ==null)
{
Response.Write("Page has expired.”);
}
Cách xóa Session trong ASP.NET
Thông thường, đối tượng session sẽ tự hủy sau khi hết thời gian timeout. Thời gian này mặc định là 20 phút nếu không được chỉ ra. Bạn cũng có thể hủy session bằng cách gọi đến phương thức Session.Abandon().
Ưu điểm của Session so với Cookie
- Session có thể lưu được những đối tượng phức tạp hơn.
- Session có độ bảo mật cao hơn (do được lưu trên server).
Cơ chế hủy Session của server
Chúng ta vẫn thường thấy rằng, khi bạn đóng trình duyệt rồi vào lại một trang web, bạn sẽ phải đăng nhập lại nếu bạn không dùng chức năng ghi nhớ trước đó. Như vậy bạn đang làm việc trong một session mới. Phải chăng session cũ đã bị hủy ngay sau khi bạn đóng trình duyệt?
Không phải vậy. Bạn nên nhớ một khái niệm cơ bản của giao thức HTTP rằng nó làm việc theo nguyên tắc request/response, nghĩa là client chỉ kết nối đến server khi có request từ phía client mà thôi. Nếu không có request, server hoàn toàn mù tịt về phía client. Điều đó cho thấy, server hoàn toàn không biết người dụng đóng trình duyệt lúc nào để mà hủy session đi.
Như bạn biết, mỗi session được định danh duy nhất bởi SessionID. Và SessionID này thực tế được lưu trên máy client trong Session Cookie. Khi bạn đóng trình duyệt, Session Cookie này được hủy ngay lập tức. Lúc này, các biến session vẫn còn tồn tại trên server. Khi mở lại trình duyệt vào lại trang web cũ, Session Cookie mới được tạo ra, một SessionID mới được ghi vào Session Cookie mới (do trong Session Cookie mới không có SessionID của session cũ), một phiên làm việc mới (session) bắt đầu. Các biến session cũ của phiên làm việc trước đó sẽ được giải phóng (hủy) khi hết thời gian timeout.