我有一个使用表单身份验证的ASP.NET网站。超时是20分钟。
我注意到,如果用户一半完成一个表单,然后超时,他们将被重定向到登录页面,填写它,然后重定向回到表单但是使用EMPTY控件。
我曾经普遍认为,当发生这种情况时,ASP.NET会使用一些技巧来重新填充表单控件。
我是否可以做出改变以确保它有效?
答案 0 :(得分:1)
我认为解决您问题的最佳方法是在web.config中的forms身份验证元素上将slidingExpiration
属性设置为true
。这样,当用户花费超过20分钟填写表格时,用户只会丢失他/她的数据。
问题出现是因为asp.net“记住”通过名为viewstate的概念在表单中输入的值,它基本上只是一个隐藏的表单字段。当服务器重定向到登录页面时,所有表单字段都会丢失,因为重定向不能包含POST数据。
如果您希望用户能够花费超过20分钟的时间来填写表单,您可以考虑在包含表单的页面上使用一些javascript,这会每隔x分钟对服务器进行一次ajax调用。使用滑动过期时,每次触发ajax调用时都会重置会话到期时间,因此只要他们正在查看包含表单的页面,它就永远不会将用户注销。
答案 1 :(得分:0)
通过将AJAX样式的WebMethod
附加到onChange事件,您可以在填充后立即将每个控件的内容动态保存到Session。
使用此方法,只要用户每20分钟努力填写至少一个控件,Session就不会超时。