我有一个很大的网页表单,并希望提示用户登录,如果他们的会话到期,或让他们登录时,他们提交的表单。似乎让他们在提交表单时登录会带来很多挑战,因为他们会被重定向到登录页面,然后原始表单提交的回发数据就会丢失。
因此,我正在考虑如何在会话到期时提示他们异步登录。以便他们停留在原始表单页面上,让一个面板出现,告诉他们会话已过期,他们需要登录,它异步提交登录,登录面板消失,用户仍在原始的部分填充的表单上,可以提交它。使用现有的ASP.NET成员控制很容易做到这一点吗?当他们提交表单时,我需要担心会话密钥吗?我的意思是,我想知道表单提交的会话密钥是否是会话到期之前的原始密钥,它不会与异步再次登录后生成的新密钥匹配(我仍然不明白ASP.NET如何跟踪身份验证/会话ID的细节)。
编辑:是的,我实际上关心的是身份验证过期。必须对用户进行身份验证,才能将提交的数据视为有效。
发布于 2010-03-12 02:59:00
非常好的回复@Mark Brackett阅读了下面的评论,我相信这是他的最终目标。
在button / submit元素上,您想要编写一个javascript方法,该方法将通过ajax轮询服务器,以查看它们是否仍然经过身份验证。
如果它们仍然是auth,你想返回true,并让表单完成常规提交,如果返回false,你想不允许表单提交。此时,您可能希望使用javascript在浏览器中显示一个“窗口”(比如浮动div),或者弹出一个真正的新窗口供他们登录(我推荐使用第一种方法),这个新窗口将允许他们通过ajax登录,然后隐藏/关闭自己。
然后,当他们再次单击submit按钮时,随着该窗口的消失,他们将能够成功发布表单。
发布于 2010-03-12 01:24:37
会话过期不同于身份验证过期-您可能需要确定您所关心的是哪一个。
会话在处于非活动状态20分钟后到期(默认情况下),并将清除Session对象。当它过期的时候,你藏在Session里的任何东西都会消失。
表单身份验证在非活动状态30分钟后过期(默认情况下)-尽管它只在半衰期更新一次。因此,在现实中-它可以在15分钟不活动后过期(默认情况下)。当它到期时,下一个请求将被重定向到您的登录页面。
会话和身份验证实际上并不相关--您可以是一个匿名(未经过身份验证)的用户,但仍然拥有一个Session --或者您可以登录(经过身份验证)但没有Session。您的Session可能在您的身份验证之前过期,反之亦然。
您可以简单地增加会话和/或身份验证的过期时间值。Session的问题是它会消耗服务器资源,而保持身份验证是一个安全问题。
如果您只关心在表单的持续时间内保持它们都有效,那么使用XmlHttpRequest或iframe命中服务器页面的少量JavaScript就会重置这两者的过期时间(因为slidingExpiration)。
也有其他技术,但首先更好地定义问题将是有帮助的。
发布于 2010-03-12 00:54:11
有很多方法可以做到这一点:您可以在用户的计算机上存储cookie,或者您也可以将表单拆分为较小的表单(即:步骤1-输入您的个人信息,步骤2-输入账单信息,等等)。
拆分表单可以使用户更快地输入数据,从而减少他们的会话过期的机会。
向其中添加cookie将使用户的信息仍然存在,即使您随后登录也是如此。只需确保在最后取消这些cookies。
https://stackoverflow.com/questions/2426920
复制相似问题