【问题标题】:Dealing with expired authentication for a partially filled form?处理部分填写的表单的过期身份验证?
【发布时间】:2010-03-11 16:49:23
【问题描述】:

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

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

编辑:是的,我实际上担心身份验证过期。必须对用户进行身份验证,提交的数据才会被视为有效。

【问题讨论】:

    标签: asp.net asp.net-membership


    【解决方案1】:

    会话过期与身份验证过期不同 - 您可能需要确定您关心的是哪一个。

    会话在 20 分钟不活动后过期(默认情况下),并将清除 Session 对象。当它过期时,您存放在Session 中的所有内容都将消失。

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

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

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

    如果您只是担心在表单期间保持它们两者处于活动状态,那么使用 XmlHttpRequest 或 iframe 访问服务器页面的一小段 JavaScript 将重置两者的过期时间(因为slidingExpiration)。

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

    【讨论】:

    • @Mark 谢谢,你说得对,我关心的是身份验证,而不是真正的会话,因为用户必须登录才能提交数据。我不想让会话保持比平时更长的时间。我确实希望登录正常超时,但数据不敏感,因此我们可以保留表单,并在用户“返回”计算机并想要完成并提交表单时要求用户登录。跨度>
    【解决方案2】:

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

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

    如果它们仍然是经过身份验证的,您仍希望返回 true 并让表单执行常规提交,如果返回 false 您希望不允许表单提交。此时,您将希望使用 javascript 在浏览器中显示一个“窗口”(想想浮动 div)或弹出一个真正的新窗口供他们登录(我推荐第一种方法)这个新窗口将允许他们通过 ajax 登录,然后隐藏/关闭自身。

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

    【讨论】:

    • @Chris 谢谢,这正是我想要描述的。所以我提出的两个问题是:使用现有的 ASP.NET Membership 控件是否可以轻松实现?当他们提交表单时,我需要担心会话密钥吗?
    • 应该是可以管理的。 (您可能需要编写一个自定义会员提供程序,因为默认情况下很多它想要重定向的东西,我已经有一段时间没有和他们合作了,所以我很犹豫我可能会说错话)我不'不要认为你需要担心会话,除非你存储表单需要提交的数据,你需要能够弄清楚如何在他们登录时重新填充。
    【解决方案3】:

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

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

    为此添加一个 cookie 可以使该人的信息仍然存在,即使您之后登录也是如此。只需确保在最后取消设置这些 cookie。

    【讨论】:

    • 这是最好的解决方案。如果您的表单太大,用户的身份验证超时,您需要改进 UI。这种方法也很容易实现。
    • @Bryan 我同意拆分表单是可能的,但我不同意这是最好的解决方案,因为这意味着我需要在数据库中暂存部分完成的数据,并带有一个指示用户的标志还没有正式提交,这对于满足业务需求很重要。此外,这并不能解决所有情况。表单可能很小,但如果用户走神、接到电话或去洗手间,用户切换到不同的应用程序仍会导致超时。
    • 这就是为什么你把它放在数据库中或者像克里斯托弗建议的那样把它放在 cookie 中。 :)
    猜你喜欢
    • 2014-07-27
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多