我遇到的问题可能是我的方法或asp.net网络表单技术的限制。此解决方案的主要驱动因素是这样一个简单的事实:当用户长时间坐在单个页面上时,他们会被重定向到我们的CAS服务器并返回到页面本身,这会导致所有表单输入被清除,就好像用户没有输入任何信息(即失去ViewState /控制状态)。话虽如此,我正在探索其他选项,例如:
即使这个解决方案允许我在每个页面上存储各个键/值对的值(localStorage [ID1]中的页面实例1,localStorage [ID2]中的页面实例2等),但仍然存在限制。服务器端验证用户正在保存哪个页面。现在我正在使用会话来维护用户正在查看的表单,即。用户仅与1页相关联。继续该示例,会话信息将导致用户与localStorage [ID1]或localStorage [ID2]相关联,而不是两者 - 这正是我的问题。我需要从客户端通信哪一页要保存。我已经探索了以下选项,并提出了以下问题:
我可能过于复杂,我知道有一种更简单的方法。
答案 0 :(得分:1)
许多网站通过在用户长时间坐在网页上时显示对话框来解决此问题,并询问他们是否仍想维护其会话。如果用户未单击“是”,则会丢失会话。
另一个解决方案是允许知道的用户暂时不使用该页面来保存结果并在以后恢复,然后继续。
在继续使用技术解决方案之前,我会尝试找出用户长时间坐在页面上的为什么。无论他们的原因是什么,如果这是一个很好的理由,你会想要试着容纳它。
如果原因是“因为我们并不真正关心你的页面而只是懒得关闭它”,那么你当前的解决方案就可以了。
答案 1 :(得分:0)
我只是想结束自己的问题。我将通过在查询字符串中存储加密值来维护页面状态来解决我的问题。从那里我将在localStorage中的字符串化json对象中的用户输入的所有值。例如:具有id:aa的第1页将在localStorage中以[appName_pageId]格式具有一个键值对。 id为bb的页面2将具有类似的键值对。如果用户被重定向到我们的CAS服务器并返回到我的页面并清除了所有值,我将能够根据查询字符串参数(aa或bb)中的值从localStorage加载正确的输入。这里要记住的重要原则是中央控制属于服务器,分布式控制应该在客户端完成。