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.

  • 🌐 HTTP không trạng thái: HTTP không lưu giữ dữ liệu giữa các yêu cầu, vì vậy ASP.NET bổ sung các cơ chế để bảo toàn trạng thái.
  • 🗂️ ViewState: ViewState tự động sao chép các giá trị điều khiển từ trang này sang trang khác.
  • 🔑 Đối tượng phiên: Session[“Key”] lưu trữ và truy xuất các cặp khóa-giá trị trong suốt vòng đời của ứng dụng.
  • ⚙️ Chế độ trạng thái: Trạng thái phiên có thể được lưu trữ trong InProc, trên StateServer, trong SQL Server hoặc một kho lưu trữ tùy chỉnh.
  • 🇧🇷 Hết giờ: Thời gian chờ của sessionState trong web.config kiểm soát thời gian tồn tại của một phiên làm việc.

Hướng dẫn quản lý phiên ASP.NET kèm ví dụ

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.

Sử dụng đối tượng phiên

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:-

  1. 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.
  2. 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.
  3. 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:

Sử dụng đối tượng phiên

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.

Câu Hỏi Thường Gặp

Đúng vậy. Trợ lý AI có thể tạo mã để lưu trữ và đọc các giá trị Phiên, đề xuất chế độ trạng thái phù hợp và ghi các thiết lập web.config. RevHãy xem mã được tạo ra để xác nhận xem nó có phù hợp với nhu cầu về khả năng mở rộng và bảo mật của bạn hay không.

Đúng vậy. Các công cụ đánh giá mã dựa trên AI có thể phát hiện các rủi ro như tấn công chiếm quyền điều khiển phiên, thiếu cookie chỉ dành cho HTTPS hoặc lưu trữ dữ liệu nhạy cảm trong phiên. Hãy xem các phát hiện này như hướng dẫn và xác nhận các bản sửa lỗi bằng cách kiểm tra bảo mật trước khi triển khai.

Trạng thái phiên (Session state) lưu trữ dữ liệu cho phiên của một người dùng duy nhất, trong khi trạng thái ứng dụng (Application state) lưu trữ dữ liệu được chia sẻ bởi tất cả người dùng của ứng dụng. Sử dụng Session cho các giá trị dành riêng cho từng người dùng và Application cho dữ liệu toàn cục như bộ đếm hoặc cấu hình.

Không. Mỗi người dùng có một phiên riêng biệt, được xác định bằng một ID phiên duy nhất được lưu trữ trong cookie. Một người dùng không thể đọc các giá trị phiên của người dùng khác, đó là lý do tại sao Session được sử dụng cho dữ liệu riêng của từng người dùng.

Tóm tắt bài viết này với: