对个人页面的国家管理建议

时间:2014-12-15 23:35:03

标签: c# asp.net webforms state-management

我遇到的问题可能是我的方法或asp.net网络表单技术的限制。此解决方案的主要驱动因素是这样一个简单的事实:当用户长时间坐在单个页面上时,他们会被重定向到我们的CAS服务器并返回到页面本身,这会导致所有表单输入被清除,就好像用户没有输入任何信息(即失去ViewState /控制状态)。话虽如此,我正在探索其他选项,例如:

  • 使用HTML localStorage在页面上存储所有值的JSON字符串,可以将其解析为对象,并在以后根据需要加载到表单中。

即使这个解决方案允许我在每个页面上存储各个键/值对的值(localStorage [ID1]中的页面实例1,localStorage [ID2]中的页面实例2等),但仍然存在限制。服务器端验证用户正在保存哪个页面。现在我正在使用会话来维护用户正在查看的表单,即。用户仅与1页相关联。继续该示例,会话信息将导致用户与localStorage [ID1]或localStorage [ID2]相关联,而不是两者 - 这正是我的问题。我需要从客户端通信哪一页要保存。我已经探索了以下选项,并提出了以下问题:

  1. 一个静态类,它包含服务器端的静态对象集合,用于存储哪些用户打开哪些页面 - >问题:正在传达实际保存的页面。
  2. 使用包含手头页面标识符的加密版本的ID动态呈现我的保存按钮。
  3. 在Querystring
  4. 中存储正在编辑的当前值
  5. 存储用户希望在回发后更改的ID值的Cookie值 - > Cookie将如何获取其值 - 尤其是当ID是新的时(用户填写第一个表单)时间)?
  6. 我可能过于复杂,我知道有一种更简单的方法。

2 个答案:

答案 0 :(得分:1)

许多网站通过在用户长时间坐在网页上时显示对话框来解决此问题,并询问他们是否仍想维护其会话。如果用户未单击“是”,则会丢失会话。

另一个解决方案是允许知道的用户暂时不使用该页面来保存结果并在以后恢复,然后继续。

在继续使用技术解决方案之前,我会尝试找出用户长时间坐在页面上的为什么。无论他们的原因是什么,如果这是一个很好的理由,你会想要试着容纳它。

如果原因是“因为我们并不真正关心你的页面而只是懒得关闭它”,那么你当前的解决方案就可以了。

答案 1 :(得分:0)

我只是想结束自己的问题。我将通过在查询字符串中存储加密值来维护页面状态来解决我的问题。从那里我将在localStorage中的字符串化json对象中的用户输入的所有值。例如:具有id:aa的第1页将在localStorage中以[appName_pageId]格式具有一个键值对。 id为bb的页面2将具有类似的键值对。如果用户被重定向到我们的CAS服务器并返回到我的页面并清除了所有值,我将能够根据查询字符串参数(aa或bb)中的值从localStorage加载正确的输入。这里要记住的重要原则是中央控制属于服务器,分布式控制应该在客户端完成。