0

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

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

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

  1. 一个静态类,包含服务器端的静态对象集合,存储哪些用户打开了哪些页面-> 问题:传达实际保存的是哪个页面。
  2. 使用包含手头页面标识符的加密版本的 ID 动态呈现我的保存按钮。
  3. 将正在编辑的当前值存储在查询字符串中
  4. 一个 cookie 值,用于存储用户希望在回发时更改的 ID 值——> cookie 如何获得它的值——尤其是当一个 ID 是新的时(用户第一次填写表单)?

我可能过于复杂了,我知道有一种更简单的方法。

4

2 回答 2

1

许多网站通过在用户在页面上停留时间过长时显示一个对话框来解决这个问题,询问他们是否仍想保持会话。如果用户没有单击“是”,则会话丢失。

另一种解决方案是允许知道他将暂时不使用该页面的用户保存到目前为止的结果并在以后恢复它们,然后继续。

在继续采用技术解决方案之前,我会尝试找出用户在页面上停留这么久的原因。不管他们的原因是什么,如果这是一个很好的理由,你会想要尝试适应它。

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

于 2014-12-15T23:41:34.670 回答
0

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

于 2014-12-22T12:11:41.077 回答