什么是ViewState?它是如何编码的?它加密了吗?谁使用ViewState?
答案 0 :(得分:12)
视图状态是一种哈希映射(或者至少你可以这么认为)ASP.NET用来存储页面的所有临时信息 - 比如当前在每个选择框中选择的选项,每个文本框中都有值,哪个面板是打开的等等。您还可以使用它来存储任意信息。
整个地图被序列化并且加密编码并保存在隐藏变量中,只要您在需要服务器往返的页面上执行任何操作,该变量就会发布回服务器。这是您可以从服务器代码访问控件上的值的方法。如果更改服务器代码中的任何值,则会在视图状态中进行更改并将其发送回浏览器。
请注意您在视图状态中存储了多少信息,但是......它很快就会变得臃肿,并且每次都很慢地转移到服务器并返回。
至于加密,我不知道它有多强,但它肯定不易人类阅读。不过,我不会将它用于敏感信息。 正如评论中指出的那样,它根本没有加密。只是基础编码,很容易逆转。
答案 1 :(得分:10)
如果你真的想要理解 ViewState(不仅仅是它的用途),那么你可能想要阅读this fabulous article(不幸的是,我不是作者: - )。 但要注意,它有点陈旧,但仍然是一个非常好的阅读。
答案 2 :(得分:4)
它是由ASP.NET生成的隐藏字段,包含有关页面上所有控件的信息。理想情况下,视图状态不需要加密,因为它永远不应包含敏感信息。要指示应加密视图状态,请将<machineKey>
文件中的machine.config
元素的验证属性设置为3DES
。 MSDN上有nice article描述ViewState。
答案 3 :(得分:4)
请允许我与您分享我今天所学到的知识。
简而言之,Microsoft®ASP.NET视图状态是使用的技术 一个ASP.NET网页,用于持久更改Web窗体的状态 跨回发。
View State将页面控件的值存储为字符串 在一些散列和编码技术中进行散列和编码。它只是 包含有关页面及其控件的信息
如果我有这样的话:
protected void Page_Load(object sender, EventArgs e)
{
ViewState["UserName"] = "Shubh Dasgupta";
ViewState["Password"] = "IAmAPassword";
}
默认情况下,页面的视图状态位于名为__VIEWSTATE的隐藏表单字段中。
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwULLTE2MTY2ODcyMjkPFgQeCFVzZXJOYW1lBQ5TaHViaCBEYXNndXB0YR4IUGFzc3dvcmQFDElBbUFQYXNzd29yZGRk2/xP37hKKE9jfGYYzFjLuwpi6rHlPdXhfSspF6YRZiI=" />
默认情况下,ViewState是编码的而不是加密的。让我们以前的输入类型值运行下面的代码:
protected void btnDecode_Click(object sender, EventArgs e)
{
//txtViewState.Text = "/wEPDwULLTE2MTY2ODcyMjkPFgQeCFVzZXJOYW1lBQ5TaHViaCBEYXNndXB0YR4IUGFzc3dvcmQFDElBbUFQYXNzd29yZGRk2/xP37hKKE9jfGYYzFjLuwpi6rHlPdXhfSspF6YRZiI="
string str = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(txtViewState.Text));
lblDecodedString.Text = str;
}
上述代码的输出为?-1616687229UserNameShubh DasguptaPasswordIAmAPassworddd??O??J(Oc|f?X?? b???=??}+)?f"
如果您仔细阅读我之前提到的文章的详细信息,您会想出“成本的ViewState”,其中写得清晰而精美:
在所有页面访问中,在保存视图状态阶段,Page类 收集其中所有控件的集合视图状态 控制层次结构并将状态序列化为base-64编码 串。 (这是隐藏的__VIEWSTATE中发出的字符串 同样,在回发时,加载视图状态阶段需要 反序列化持久化的视图状态数据,并更新相关的数据 控件层次结构中的控件。
亲自尝试一下。 Download Sample
答案 4 :(得分:2)
ViewState未使用base64编码加密为默认值。如果您的页面具有控件操作,则可能需要使用viewstate。
答案 5 :(得分:1)
ViewState是asp.net用于启用回发模型的一种技术。标记为runat="server"
的所有控件的状态都存储在此base64字符串中。
此pluralsite article更深入地解释