处理部分填充表单的过期身份验证?

时间:2010-03-11 16:49:24

标签: asp.net asp.net-membership

我有一个大型网络表单,并希望提示用户在会话过期时登录,或者在提交表单时让他们登录。似乎让他们在提交表单时登录会产生很多挑战,因为他们会被重定向到登录页面,然后原始表单提交的回发数据就会丢失。

所以我正在考虑如何在会话到期时提示他们以异步方式登录。为了使它们保留在原始表单页面上,让一个面板显示会话已经过期并且需要登录,它会异步提交登录,登录面板消失,用户仍然在原始的部分填充表单上,并且可以提交它。使用现有的ASP.NET Membership控件可以轻松实现吗?当他们提交表单时,我需要担心会话密钥吗?我的意思是,我想知道表单提交的会话密钥是否是会话到期之前的原始会话密钥,这与在异步登录后生成的新密钥不匹配(我仍然不了解ASP.NET的详细信息)跟踪身份验证/会话ID)。

编辑:是的我确实关注身份验证过期。必须对用户进行身份验证才能将提交的数据视为有效。

3 个答案:

答案 0 :(得分:2)

会话过期与身份验证过期不同 - 您可能需要确定您关注的内容。

会话在20分钟不活动(默认情况下)后过期,并将清除Session对象。当它到期时,你隐藏在Session中的任何内容都将消失。

[Forms]身份验证在不活动30分钟后(默认情况下)过期 - 尽管它只在每个半衰期更新。所以,实际上 - 它可以在15分钟不活动后失效(默认情况下)。当它到期时,下一个请求将被重定向到您的登录页面。

会话和身份验证并不真正相关 - 您可以是匿名(未经身份验证的)用户,但仍然拥有Session - 或者您可以登录(已通过身份验证)但没有{{ 1}}。您的身份验证之前Session可能会过期,反之亦然。

您可以简单地调整会话和/或身份验证的到期值。 Session的问题在于它会咀嚼服务器资源,并且保持身份验证是一个安全问题。

如果您只关心在表单期间保持两个活着,那么使用XmlHttpRequest或iframe访问服务器页面的一小部分JavaScript将重置两者的到期时间(因为slideExpiration)。

还有其他技术,但首先要更好地定义问题会有所帮助。

答案 1 :(得分:1)

有很多方法可以做到这一点:您可以在用户的​​计算机上存储cookie,或者您也可以将表单拆分为更小的形式(例如:步骤1 - 输入您的个人信息,步骤2 - 输入计费信息等)。

拆分表单可以让用户更快地输入数据,从而减少会话过期的可能性。

向此添加cookie会使人员的信息仍然存在,即使您之后登录也是如此。请确保在最后取消这些所述的cookie。

答案 2 :(得分:1)

非常好的回应@Mark Brackett在下面阅读OP的评论我相信这是他的最终目标。

在按钮/提交元素上,您要编写一个javascript方法,通过ajax轮询服务器以查看它们是否仍然经过身份验证。

如果他们是auth'd仍然你想要返回true并让表单执行常规提交,如果它返回false,你想不允许表单提交。此时你将需要使用javascript在浏览器中显示一个“窗口”(想想浮动div)或者为它们弹出一个真正的新窗口来登录(我建议第一种方法)这个新窗口将允许他们通过ajax登录,然后隐藏/关闭自己。

然后,当他们再次点击提交按钮时,该窗口就会消失,他们将能够成功发布表单。