当身份验证会话在ASP.NET中超时时,控制值会丢失

时间:2010-11-24 14:04:02

标签: asp.net forms-authentication postback

我有一个使用表单身份验证的ASP.NET网站。超时是20分钟。

我注意到,如果用户一半完成一个表单,然后超时,他们将被重定向到登录页面,填写它,然后重定向回到表单但是使用EMPTY控件。

我曾经普遍认为,当发生这种情况时,ASP.NET会使用一些技巧来重新填充表单控件。

我是否可以做出改变以确保它有效?

2 个答案:

答案 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就不会超时。