2009-10-22 25 views
9

Tôi có một trang mà tôi muốn duy trì giá trị của đối tượng giữa các lần đăng lại. Tôi đang nghĩ đến hai cách để duy trì giá trị của các đối tượngCách tốt nhất để sử dụng ViewState hoặc trường ẩn

  1. Store giá trị trong Xem Nhà nước
  2. Store giá trị trong lĩnh vực ẩn

đó là lựa chọn tốt nhất để sử dụng dựa trên hiệu suất

Trả lời

10

Viewstate nếu bạn không cần tham chiếu nó trong tập lệnh phía máy khách. Một trường ẩn nếu bạn làm. Ngoài ra, hãy xem xét rằng nếu dữ liệu nhạy cảm, ViewState được mã hóa theo mặc định, trong khi trường ẩn, theo mặc định, lưu trữ nó dưới dạng văn bản thuần túy hiển thị cho bất kỳ ai biết cách xem nguồn.

Sửa

lưu ý mỗi @ Andrew Hare về câu trả lời của riêng mình, tôi chỉnh sửa này. Đó là một sự phân biệt đủ quan trọng cần lưu ý. Tôi ghét ai đó nghĩ rằng họ "an toàn" bằng cách sử dụng Viewstate dựa trên sự giám sát của tôi.

Viewstate KHÔNG được mã hóa theo mặc định, nó được lưu trữ dưới dạng mã hóa Base-64. Nó có thể được giải mã khá dễ dàng, vì vậy sử dụng Viewstate vì nó được mã hóa theo mặc định là không hợp lệ. Nó tốt hơn so với văn bản thuần túy, nhưng không phải cho bất cứ ai có khả năng google "giải mã Viewstate" hoặc "giải mã Viewstate".

Vì vậy, đừng dựa vào Viewstate để bảo vệ thông tin ẩn của bạn trong mã phía máy khách.

Bài viết here cho biết cách mã hóa chính xác. (nhưng cũng cảnh báo về các vấn đề hiệu suất).

0

Tôi thích ViewState - khó khăn hơn nhiều để hack - một người khó chịu có thể dễ dàng gửi trang của bạn cho bạn với dữ liệu xấu trong hi của bạn trường dden

0

Bạn muốn lưu trữ nó trong trạng thái xem. Các trường ẩn có thể được cập nhật trên trình duyệt, vì chúng có nghĩa là lưu trữ thông tin có thể được thao tác trên phía máy khách. Trạng thái xem sẽ được xác thực bởi asp.net chống lại giả mạo, nơi bạn sẽ phải làm điều đó với chính trường ẩn.

2

Nó không thực sự quan trọng vì ViewState được lưu trữ trong đầu vào bị ẩn. Sử dụng cái nào dễ dàng hơn cho bạn. Nếu nó đã được vào tôi, tôi sẽ chọn ViewState kể từ khi chạy ASP.NET sẽ xử lý serialization và deserialization của các đối tượng của bạn cho bạn.

+0

Tôi không chắc mình đồng ý ... Viewstate được mã hóa khi một trường ẩn, theo mặc định, không phải là Trừ khi tôi bỏ sót điều gì đó. Tôi thường tin tưởng câu trả lời của bạn, vì vậy tôi đặt cược tôi đang thiếu một cái gì đó. – David

+1

Không, bạn làm cho một điểm tốt - ViewState có thể được mã hóa (nhưng nó không phải là luôn luôn - theo mặc định nó chỉ đơn giản là base-64 được mã hóa). Đẹp bắt! :) –

+0

Cảm ơn bạn! Bạn nói đúng về base-64, tất nhiên rồi. Đó là một sự khác biệt quan trọng. Tôi đang chỉnh sửa câu trả lời của mình để phản ánh điều này. – David

Các vấn đề liên quan