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

Dav*_*vid 7 asp.net postback forms-authentication

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

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

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

我可以做出改变以确保它做到吗?

Kla*_*sen 1

我认为解决您的问题的最佳方法是将属性设置slidingExpirationtrueweb.config 中的表单身份验证元素。这样,只有当用户填写表单的时间超过 20 分钟时,才会丢失其数据。

出现此问题的原因是,asp.net 通过名为“视图状态”的概念“记住”在表单中输入的值,该概念基本上只是一个隐藏的表单字段。当服务器重定向到登录页面时,所有表单字段都会丢失,因为重定向不能包含 POST 数据。

如果您希望用户能够花 20 分钟以上的时间来填写表单,您可以考虑在包含表单的页面上添加一些 javascript,每 x 分钟对服务器进行一次 ajax 调用。通过滑动过期,这将在每次触发 ajax 调用时重置会话过期时间,因此只要用户正在查看包含表单的页面,它就永远不会注销您的用户。