2009-07-23 11 views
15

Có 6 kỹ thuật quản lý các trạng thái trong ASP.NET 3.5 (theo như tôi biết).Quản lý nhà nước ASP.NET trong các tình huống thích hợp

(1) View State 
(2) Cross Page Posting 
(3) Query String 
(4) Session State 
(5) Application State 
(6) Cookies 

Có thể cho tôi một số ví dụ thích hợp về tình huống mà tôi nên sử dụng các kỹ thuật này không?

Ví dụ:

(*) Session State: Personalization, Buy Cart, etc. 
(*) Cookies: Saving User Credentials, etc. 

Trả lời

5

quản lý nhà nước lựa chọn

Xem trạng thái:

Sử dụng khi bạn cần lưu trữ một lượng nhỏ thông tin cho một trang đó sẽ gửi lại cho chính nó. Sử dụng thuộc tính ViewState cung cấp chức năng với bảo mật cơ bản.

trạng thái điều khiển:

Sử dụng khi bạn cần lưu trữ một lượng nhỏ thông tin trạng thái cho một điều khiển giữa các chuyến đi vòng đến máy chủ.

lĩnh vực Hidden:

Sử dụng khi bạn cần lưu trữ một lượng nhỏ thông tin cho một trang đó sẽ gửi lại cho chính nó hoặc đến một trang khác, và khi an ninh không phải là một vấn đề.

Bạn chỉ có thể sử dụng trường ẩn trên các trang được gửi tới máy chủ.

Cookie:

Sử dụng khi bạn cần lưu trữ một lượng nhỏ thông tin trên máy khách và bảo mật không phải là vấn đề.

chuỗi truy vấn:

Sử dụng khi bạn đang chuyển một lượng nhỏ thông tin từ trang này sang trang khác và an ninh không phải là một vấn đề.

Bạn chỉ có thể sử dụng chuỗi truy vấn nếu bạn đang yêu cầu cùng một trang hoặc một trang khác thông qua liên kết.

Server Side lựa chọn quản lý

nhà nước ứng dụng

Sử dụng khi bạn đang lưu trữ thường xuyên thay đổi, thông tin toàn cầu được sử dụng bởi nhiều người sử dụng, và an ninh không phải là một vấn đề. Không lưu trữ số lượng lớn thông tin trong trạng thái ứng dụng.

Trạng thái phiên

Sử dụng khi bạn lưu trữ thông tin ngắn hạn dành riêng cho phiên và bảo mật riêng lẻ là một vấn đề. Không lưu trữ số lượng lớn thông tin trong trạng thái phiên. Hãy lưu ý rằng một đối tượng trạng thái phiên sẽ được tạo và duy trì suốt đời của mỗi phiên trong ứng dụng của bạn. Trong các ứng dụng lưu trữ nhiều người dùng, điều này có thể chiếm các tài nguyên máy chủ đáng kể và ảnh hưởng đến khả năng mở rộng.

tính sơ

Sử dụng khi bạn đang lưu trữ thông tin người dùng cụ thể mà cần phải được tiếp tục tồn sau khi phiên người dùng là hết hạn và cần phải được lấy lại những lần ghé thăm sau này để ứng dụng của bạn.

Hỗ trợ cơ sở dữ liệu

Sử dụng khi bạn đang lưu trữ lượng lớn thông tin, quản lý giao dịch hoặc thông tin phải tồn tại và khởi động lại phiên. Khai thác dữ liệu là một mối quan tâm và bảo mật là một vấn đề.

+0

để biết thêm chi tiết, hãy truy cập http://coscientech.blogspot.com hoặc http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx – xxxxxxxxxadfas

+0

Tôi cũng đã xem Đối tượng hồ sơ và hành vi UserData. Tôi đoán bạn nên kiểm tra điều này trên msdn.microsoft.com – xxxxxxxxxadfas

+0

http://coscientech.blogspot.com/2010/09/aspnet-state-management.html – anonymous

15

Có rất nhiều yếu tố có thể ảnh hưởng này, vì vậy tôi sẽ không bình luận về tất cả chúng. Nhưng dưới đây là một vài gợi ý:

  • ViewState - này rất hữu ích khi bạn sẽ được đăng tải trở lại cùng một trang thường xuyên (một cái gì đó bạn đang thực tế buộc phải làm bằng ASP.Net Webforms). Mức độ hữu ích của thay đổi chính xác tùy thuộc vào loại ứng dụng bạn đang xây dựng. Đối với các trang web công cộng, nó nên được sử dụng rất ít. Bạn thậm chí có thể muốn tắt nó theo mặc định. Đối với các trang web nội bộ cục bộ, đây là một công cụ tuyệt vời — đặc biệt đối với các trang web có kích thước nhỏ hơn, nặng hơn.

  • Query String - Sử dụng tính năng này để lưu trữ trạng thái mà bạn cần cho phép người dùng đánh dấu trang hoặc quy trình và quay lại sau này. Thậm chí sau đó, bạn có thể muốn giữ nó xuống một số loại băm mà bạn có thể sử dụng như một chìa khóa trong một tra cứu cơ sở dữ liệu để tránh một url thực sự khổng lồ (mặc dù hashes có vấn đề riêng của họ). Ngoài ra, rất nhiều người dùng thích thú với chuỗi truy vấn của bạn trực tiếp, vì vậy có thể nguy hiểm khi đặt quá nhiều ở đây. Thật dễ dàng để vô tình hiển thị dữ liệu cho người dùng không được phép xem dữ liệu theo cách này.

  • Application State - Hãy nhớ rằng điều này được chia sẻ bởi tất cả người dùng, vì vậy hãy sử dụng một cách thích hợp. Những thứ như lượt xem có thể đến đây.

  • Cookies - Không sử dụng cookie để lưu trữ thông tin đăng nhập của người dùng. Chúng chỉ là các tệp văn bản không được mã hóa. Sử dụng cookie để lưu khóa vào phiên (ngay cả ở đây bạn có thể và bây giờ nên sử dụng các phiên cookie ít hơn) và cài đặt cá nhân hóa đơn giản sẽ cụ thể cho người dùng và trình duyệt đó. Ví dụ, kích thước màn hình của tôi ở nơi làm việc khác với ở nhà và vì vậy việc đặt cài đặt kích thước/bố cục hiển thị vào cookie là tốt vì cài đặt dính cho mỗi máy tính, nhưng sẽ không làm tổn hại đến bảo mật của tôi nếu ai đó đọc thông tin.

Bây giờ tôi muốn nhấn mạnh khái niệm này từ "Query String" phần:

bạn có thể muốn giữ nó xuống để một số loại băm mà bạn có thể sử dụng như một chìa khóa trong một cơ sở dữ liệu tra cứu

Một lần nữa, băm có vấn đề riêng, nhưng tôi muốn chỉ ra một số mục trong danh sách của tôi nói chuyện (bao gồm Chuỗi truy vấn) về tải dữ liệu từ trình duyệt web khách lên máy chủ web: ViewState, Chuỗi truy vấn , Cookie và Cross-Page Post. Bạn muốn giảm thiểu dữ liệu mà bạn di chuyển từ máy khách đến máy chủ. Khái niệm này được áp dụng cho tất cả trong số này, và vì nhiều lý do:

  1. kéo dữ liệu từ khách hàng là chậm cho các trang web internet công cộng. Ngay cả các kết nối băng thông rộng thường làm tê liệt băng thông có sẵn để tải lên.512Kpbs (vẫn là tốc độ tải lên băng rộng thông thường ở nhiều khu vực) là không có gì khi so sánh với kết nối Gigabit Ethernet (hoặc nhanh hơn) có khả năng nằm giữa cơ sở dữ liệu và máy chủ web của bạn. Nhiều như bạn có thể nghĩ về một truy vấn cơ sở dữ liệu là chậm (và nó là), nó vẫn có thể là một cách tốt hơn để đi hơn chờ đợi cho cùng một dữ liệu đến từ khách hàng.
  2. Giữ dữ liệu trên máy chủ rẻ hơn, vì bạn không trả tiền cho băng thông cần thiết để đẩy nó đến hoặc từ máy khách và băng thông thường tốn nhiều hay nhiều hơn phần cứng máy chủ của bạn. An toàn hơn, bởi vì nếu được thực hiện ngay cả khi máy tính của khách hàng hoặc kết nối bị xâm nhập, tất cả các hacker có quyền truy cập ban đầu là một khóa băm có khả năng hết hạn vào thời điểm anh ta có thể giải mã nó. Tất nhiên, nếu làm sai, anh ta có thể sử dụng khóa đó ngay lập tức ngay lập tức, vì vậy bạn vẫn cần phải cẩn thận.

Vì vậy, đối với hầu hết mọi thứ, tôi khuyên bạn nên bắt đầu bằng cách giữ khóa cơ sở dữ liệu trong phiên và sau đó có mã để dễ dàng lấy những gì bạn cần từ cơ sở dữ liệu dựa trên khóa đó. Khi bạn gặp phải các tắc nghẽn, tiểu sử để tìm hiểu vị trí của chúng và bắt đầu lưu vào bộ nhớ cache các trang hoặc điều khiển đó hoặc giữ trực tiếp dữ liệu/truy vấn đó trong phiên.

1

Không chắc chắn nếu bạn có nghĩa là đối tượng Cache theo Trạng thái ứng dụng.

Đối tượng Cache là một cách tuyệt vời để quản lý trạng thái rộng của ứng dụng, ví dụ: để ghi lại nguồn và đếm truy cập vào trang web của bạn (để ngăn chặn các cuộc tấn công DDOS chẳng hạn).

+0

Đối tượng bộ nhớ cache là nơi tuyệt vời để lưu trữ dữ liệu tĩnh (hoặc bất kỳ dữ liệu nào không thay đổi nhiều nhưng được tham chiếu bởi ứng dụng của bạn) để tránh phải đọc từ cơ sở dữ liệu hoặc hệ thống tệp mỗi lần. – Keith

1

(3) Query String (4) phiên Nhà nước (5) Nhà nước Ứng dụng (6) Cookies

1. ViewState

  • Disclaimer: Sử dụng càng ít càng tốt . Điểm tốt là để luôn luôn mỗi tiểu bang có thể truy cập bằng url, nếu có thể.
    • F.e. Phân trang phải sử dụng URL (để /url/?p=2 thay vì lưu trữ trang trong Viewstate)
  • Sử dụng để duy trì trạng thái kiểm soát giữa các chu kỳ trang.
    • F.e. Lưu trữ mục đã chọn trong hộp kiểm, vì vậy bạn có thể xác định xem mục đã thay đổi hay chưa.

2. Chữ thập trang Gửi bài

Đừng. Xem tuyên bố từ chối trách nhiệm cho ViewState. Sử dụng URL cho mục đích này hoặc lưu trữ dữ liệu trong phiên/cookie/hồ sơ nếu cần lưu giữ nhiều thuộc tính.

Nhược điểm lớn của CPP là người dùng không thể sử dụng các nút 'Quay lại' và 'Chuyển tiếp' trong trình duyệt web của nó. Khi người dùng nhấp vào nút quay lại, nó muốn hoàn tác mọi thứ trên trang đó và thử lại lần cuối cùng. Khi sử dụng CPP để bấm chúng thông qua một thuật sĩ; hành vi này là không thể mà không có rất nhiều 'Bạn có chắc chắn muốn gửi lại blablablabl'.

3.Chuỗi truy vấn

Sử dụng rất nhiều. Mỗi trạng thái hiển thị mà một trang có thể truy cập sẽ có thể truy cập được bằng URL. Những người có screenreaders sẽ cảm ơn bạn vì điều này. Và bằng cách sử dụng chuỗi truy vấn không cần sử dụng giải pháp chỉ có javascript.

/url/?page=2 // when doing paging, don't use postback for this 
/url/?tab=advanced-search // when having tabs on top of your page 

, vv

4. Session State

Sử dụng này cho các đối tượng ngắn sống, mà chỉ có ý nghĩa thời gian này, khách truy cập trang web của bạn. Ví dụ:

  • Những bước của một phù thủy nào đó đã đạt được
  • trang mà người dùng đã ghé thăm trước
  • đối tượng nhỏ mà bạn muốn đặt trong bộ nhớ cache, nhưng điều đó là sử dụng ràng buộc

Không sử dụng phiên nhưng hồ sơ cho những việc như:

  • Tuỳ chọn
  • Ngôn ngữ được chọn

Vì những điều đó cũng có ý nghĩa trong lần tiếp theo người dùng truy cập vào trang web của bạn.

5. Trạng thái ứng dụng

Không bao giờ. Sử dụng bộ nhớ cache ASP.NET, hoặc memcached, hoặc bất kỳ khung bộ nhớ đệm cho việc này.

6. Cookies

Session ID, ID Cấu hình cho người dùng chứng thực; tùy chọn người dùng cho người dùng ẩn danh (mọi thứ được liệt kê trong danh sách thứ hai dưới 4.).