Quản lý phiên ASP.NET [Ví dụ]
⚡ Tóm tắt thông minh
Quản lý phiên ASP.NET cho phép ứng dụng HTTP không trạng thái ghi nhớ dữ liệu người dùng giữa các yêu cầu. Bài viết này giải thích về ViewState, đối tượng Session để lưu trữ các cặp khóa-giá trị, một ví dụ minh họa, các chế độ trạng thái phiên, cấu hình thời gian chờ và những lợi ích của trạng thái phiên.
Quản lý phiên ASP.NET
Giao thức HTTP mà tất cả các ứng dụng web hoạt động là giao thức không trạng thái. Bởi không trạng thái, nó chỉ có nghĩa là thông tin không được giữ lại từ yêu cầu này sang yêu cầu khác.
Ví dụ, nếu bạn có một trang đăng nhập có 2 hộp văn bản, một cho tên và một cho mật khẩu. Khi bạn nhấp vào nút Đăng nhập trên trang đó, ứng dụng cần đảm bảo rằng tên người dùng và mật khẩu được chuyển sang trang tiếp theo.
Trong ASP.Net, điều này được thực hiện theo nhiều cách khác nhau. Cách đầu tiên là thông qua một khái niệm gọi là ViewState. Đây là nơi ASP.Net tự động lưu trữ nội dung của tất cả các điều khiển. Nó cũng đảm bảo rằng nội dung này được truyền sang trang tiếp theo. Điều này được thực hiện thông qua một thuộc tính có tên là ViewState.
Việc nhà phát triển thay đổi bất kỳ điều gì ở trạng thái xem là không lý tưởng. Điều này là do nó chỉ được xử lý bởi ASP.Net.
Đối tượng phiên ASP.NET
Một cách khác là sử dụng một đối tượng được gọi là “Đối tượng phiên”. Đối tượng Session có sẵn trong suốt vòng đời của ứng dụng. Bạn có thể lưu trữ số lượng cặp khóa-giá trị bất kỳ trong đối tượng Phiên. Vì vậy, trên bất kỳ trang nào, bạn có thể lưu trữ một giá trị trong đối tượng Phiên thông qua dòng mã bên dưới.
Session["Key"] = value
Giá trị được lưu trữ trong một đối tượng Session, và phần 'key' được sử dụng để đặt tên cho giá trị. Điều này cho phép giá trị được truy xuất vào thời điểm sau đó. Để truy xuất một giá trị, bạn chỉ cần thực hiện câu lệnh dưới đây.
Session["Key"]
Ví dụ về đối tượng phiên ASP.NET
Trong ví dụ này, chúng ta sẽ sử dụng đối tượng Session để lưu trữ tên được nhập vào trường văn bản tên trên trang. Sau đó, chúng ta sẽ truy xuất giá trị đó và hiển thị nó trên trang một cách phù hợp. Hãy thêm đoạn mã dưới đây vào tệp Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Giải trình:-
- Dòng mã đầu tiên lấy giá trị của điều khiển hộp văn bản Tên và lưu trữ nó trong đối tượng Session. Bằng cách chỉ định mã Session[“Name”], chúng ta đang đặt tên cho thuộc tính là “Name”. Việc chỉ định tên cho thuộc tính giúp việc truy xuất nó sau này dễ dàng hơn.
- Dòng mã tiếp theo lấy giá trị được lưu trữ từ đối tượng Session. Sau đó, nó ghi giá trị này thông qua phương thức 'Response.Write' trở lại máy khách.
- Cuối cùng, chúng ta ẩn tất cả các nút điều khiển trên biểu mẫu. Nếu không làm vậy, tất cả các nút điều khiển cùng với giá trị phản hồi sẽ được hiển thị cùng nhau.
Sau khi thực hiện các thay đổi trên, bạn sẽ thấy kết quả như sau.
Đầu ra:
Từ đầu ra, bạn có thể thấy giá trị Phiên của tên đã được truy xuất và hiển thị trong trình duyệt.
Các chế độ trạng thái phiên ASP.NET
ASP.NET có thể lưu trữ dữ liệu phiên ở nhiều nơi khác nhau, được gọi là các chế độ trạng thái phiên. Chế độ bạn chọn sẽ ảnh hưởng đến hiệu suất, khả năng mở rộng và liệu dữ liệu có còn tồn tại sau khi khởi động lại ứng dụng hay không. Bảng dưới đây so sánh các chế độ này:
| Chế độ | Nơi lưu trữ trạng thái | Tốt nhất cho |
|---|---|---|
| Trong quy trình | Trong bộ nhớ của máy chủ web (mặc định) | Ứng dụng trên một máy chủ duy nhất; nhanh nhất, nhưng mất dữ liệu khi khởi động lại. |
| Máy chủ trạng thái | Một quy trình Dịch vụ Trạng thái ASP.NET riêng biệt | Các trang trại web; vẫn hoạt động sau khi khởi động lại ứng dụng. |
| máy chủ SQL | Cơ sở dữ liệu SQL Server | Các trang trại web cần trạng thái bền vững và có khả năng mở rộng. |
| Tuỳ chỉnh | Một nhà cung cấp tùy chỉnh mà bạn triển khai | Các cửa hàng chuyên dụng như Redis |
| tắt | Trạng thái phiên bị vô hiệu hóa | Các ứng dụng không cần phiên |
InProc là phương thức mặc định và nhanh nhất, nhưng đối với các triển khai cân bằng tải, StateServer hoặc SQLServer duy trì các phiên làm việc khả dụng trên nhiều máy chủ.
Cách cấu hình thời gian chờ phiên trong ASP.NET
Một phiên làm việc không kéo dài mãi mãi; nó sẽ hết hạn sau một khoảng thời gian không hoạt động. Bạn có thể thiết lập thời gian chờ này trong tệp web.config bằng cách sử dụng phần tử sessionState, trong đó giá trị thời gian chờ được tính bằng phút:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Bạn cũng có thể thiết lập nó trong mã bằng cách sử dụng Session.Timeout = 30;Thời gian chờ mặc định là 20 phút. Chọn thời gian chờ ngắn hơn sẽ giải phóng bộ nhớ máy chủ nhanh hơn và cải thiện bảo mật, trong khi thời gian chờ dài hơn sẽ giữ người dùng đăng nhập lâu hơn.
Ưu điểm và nhược điểm của trạng thái phiên
Trạng thái phiên rất tiện lợi, nhưng nó cũng có những mặt hạn chế mà bạn cần cân nhắc trước khi phụ thuộc quá nhiều vào nó.
Ưu điểm:
- Dễ sử dụng để lưu trữ dữ liệu cho từng người dùng, ví dụ như thông tin cửa hàng.ping Thông tin giỏ hàng hoặc thông tin đăng nhập.
- Có thể lưu trữ các đối tượng phức tạp, không chỉ là chuỗi ký tự.
- Dữ liệu được lưu trữ trên máy chủ, do đó an toàn hơn so với lưu trữ phía máy khách.
Nhược điểm:
- Chế độ InProc tiêu tốn bộ nhớ máy chủ và không mở rộng được trên quy mô toàn bộ cụm máy chủ web.
- Dữ liệu phiên sẽ bị mất khi phiên hết hạn hoặc ứng dụng khởi động lại (ở chế độ InProc).
- Việc lưu trữ lượng dữ liệu lớn cho mỗi người dùng có thể ảnh hưởng đến hiệu năng khi hệ thống chịu tải nặng.



