除了因为会话存储是会话全球超过一页,为什么你想使用的视图状态保存值?

这似乎很荒谬发送任何形式的比一些小的查询字符串值一样等信息,来回从客户机到服务器。我的意思是带宽(!)的浪费,只是为了存储的目的。这次会议,同时在多个网页全球,好像到视图状态完全更好的选择。

特别是随着asp.net AJAX控件和变型中,视图状态可能很快变得臃肿跟踪的各种状态和所有这些不同的控制变量和HTML元素。

不过,为什么是有页面视图状态变量存储,并在所有对象?

也许我错过了页面的ViewState存储另一个伟大的使用情况,没有人知道的东西在那里?

感谢阅读!

编辑:每个人都有一个伟大的回答,对不起,如果我不接你的

有帮助吗?

解决方案

会话用完,视图状态不 - 以后可以回去一个小时,你的浏览状态将仍然可用。视图状态也始终保持可用状态,当你去前进/后退的网站上,会话的变化。

其他提示

在全部理由视图状态或会话是把纸幅从一个无状态系统为动态的,定制的经验。当用户请求一个页面,你可以继续当用户在他们的经验离开的唯一办法是要记住无论是服务器或用户的客户端上的状态。

视图状态是用于在客户机上记住用户的状态的机构。 会话是用于在服务器上记住用户的状态的机构。

视图状态是瞬态存储机制。使用ViewState的控制有自己的状态呈现到HTML页面的隐藏输入。为了防止篡改,它被签署。这是不加密的,然而,你可能想避免将任何在那里敏感。视图状态是您希望跨系列多个请求(页面加载)的发布情况下非常有用。这方面的一个例子是,当一个表格没有验证,因为也许在用户输入了错误的电子邮件地址什么的,你要还原的形式,因为它是在用户提交之前。对此的缺点是,视图状态是一个饥饿兽和可以很容易地添加30-50%至页面大小。

会话,在另一方面,被存储在服务器上。该客户端获得一个令牌,告诉其中的内存块是他们的服务器。因为数据不被一遍又一遍地重发到用户这可以比视图状态更安全。有取舍虽然。你的服务器可以运行内存不足。或者,如果他们的会话被中断的用户可能会丢失数据。

一般情况下,有没有“正确”的答案上使用。它是所有关于你正在试图完成的任务。

大多数的东西与控制应该使用视图状态。如果你是敏感信息处理然而,考虑会话。如果您有数据,是一组特定的网页,使用视图状态。如果是,你将需要在整个用户访问您的网站,considier会话数据。

例如当你的应用程序可能会在计算机群中运行,并且不能配置会话使用SQL Server(或者使用SQL Server是太多性能损失)

视图状态和会话有不同的范围。 ViewState是设计用来存储更多或更少的瞬时数据,在“回传”,而会话用于保存重要的会话状态数据。我建议使用与特定“页会话”状态的ViewState。

如果你不喜欢的ViewState的正常行为,这是很简单的写自己的PageStatePersister,让这个对象使用会话,或像Memcached的执行持久性,例如。然后,可以完全覆盖默认持久性机制。

然后,好处是你可以无缝地继续在.NET Framework中,使用标准的Web控件,其将全部采用的ViewState / ControlState-旨在这种类型的数据,没有腹胀的ViewState。服务器存储器的持久性机制可能是非常有效的。

不是一个真正的直接回答你的问题,但它可能会解决您的问题。

可以存储视图状态服务器侧,从而消除了客户端的有效负载。

创建类的继承页面,并重写PageStatePersister。 http://msdn.microsoft.com/en-我们/库/ system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

视图状态本质上只是必须被上传到服务器以及与每个请求解析一个隐藏的输入。该字段典型自动填充,往往与编程一无所知,而且可以变得非常大。对于提出的问题,因为即使宽带用户已经非常有限的上行带宽很多网站。

在其中所有的用户提供高速LAN接入到服务器,但用于保持会话数据是有限的,它可能更有意义的可用RAM内联网站点。

不回答你的问题,但你的假设之一是不正确。

会话ID可以在URL被传递。会话不需要Cookie。

http://msdn.microsoft.com/en-us/library /aa479314.aspx

<sessionState cookieless="true" />

您正在做一个应用程序,其中的ViewState膨胀,在大多数情况下,是不是一个问题,那么它在ViewState更好的商店页面的具体数据,因为它有助于你的服务器有更好的表现。如果你去疯了会话,或任何缓存,对于这个问题,你可以伤害自己更然后你帮助你自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top