【问题标题】:asp.net server side viewstate without sessions没有会话的 asp.net 服务器端视图状态
【发布时间】:2009-10-08 20:40:43
【问题描述】:

所以我已尽我所能最小化我在 ASP.net ajax 应用程序上的视图状态、http 压缩、禁用隐藏字段中的视图状态,但我想更进一步。所以经过研究似乎有两种方法

a) 使用使用 LoadPageStateFromPersistenceMedium 的 ASP.net 1.x 方式

b) 或者使用 ASP.net 2.x 方式的 SessionPageStatePersister

所以 B 看起来不太好,因为如果我理解正确,视图状态将链接到会话 ID,并且由于我的会话可能因多种原因而过期,我不想这样做。

那么在依赖会话的服务器上保存视图状态的最佳方法是什么?

如果是LoadPageStateFromPersistenceMedium,并且使用了隐藏字段,那么如何在页面中注入一个随机id的隐藏字段呢?

我如何确定何时清除服务器上的视图状态文件?

【问题讨论】:

  • 如果你想最小化状态,你考虑过 ASP.NET MVC 吗?

标签: asp.net viewstate


【解决方案1】:

我认为您应该认真考虑会话选项。它在资源上是最佳的,即使 Session 过期,如果您的 Auth 机制与会话超时相关,这也不是问题。

http://professionalaspnet.com/archive/2006/12/09/Move-the-ViewState-to-Session-and-eliminate-page-bloat.aspx

作为后备,您可以实现一个页面库,将 Session ID 放入 ViewState,在回发时检查它,如果它与某些恢复操作不同。

您唯一的其他选择是创建您自己的使用数据库或其他数据存储的 PageAdapter。

【讨论】:

  • 我们使用表单身份验证,因此我认为它与会话超时不一致。您如何看待aspnet.4guysfromrolla.com/articles/011707-1.aspx 中的这种方法,他们在那里创建了自己的 FileSystemPageStatePersister 类。您认为这会更好地应用于网络农场吗?
  • 只需使用 SQL Server 进行会话持久性或在单台机器上使用该服务,它就可以在网络场上完美运行。
  • 另一个问题是会话默认在 20 分钟后过期。当然我们可以扩展它,但这只会占用更多的内存……还有用户多次来回点击、在浏览器之间切换……或删除他们的 cookie 的问题。我读过可以编写自己的 PageStatePersister 来生成一个 guid,将其附加到页面上的隐藏字段,然后使用 guid 作为键将视图状态保存到数据库或文件中。这会是更好的方法吗?
  • SQL State Service 中的会话机制确实不错。您可以自己滚动,但在一天结束时将表单身份验证票超时和会话设置为相同的时间段是一种标准的继续方式。
  • Tuviah,这正是 Flesk Viewstate 优化器使用的机制
【解决方案2】:

试试Flesk ViewState Optimizer怎么样?

有多个选项,包括存储在会话中、数据库中等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2010-09-24
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多