asp.net FormsAuthentication:如何在配置文件中设置多个超时值?

时间:2010-02-19 16:28:46

标签: asp.net

我正在尝试在我的网站上实现“记住我”功能,以允许用户无需再次登录即可保持登录状态。

我这样做:

System.Web.Security.FormsAuthentication.SetAuthCookie(userName, true);

我注意到第二个参数(createPersistentcookie)并不是真正持久的,因为它取决于配置文件中设置的超时值。

据我所知:

如果createPersistentcookie = false,那么如果用户关闭浏览器或x分钟活动后(x在配置文件中指定),用户将自动注销。

如果createPersistentcookie = true,那么如果用户关闭浏览器,用户将不会被注销,但在x分钟的活动后仍然会被注销(x在配置文件中指定)。

请注意,在这两种情况下,'x'具有相同的值,来自配置文件。

我想做的是:

- 如果访问者不希望一直保持登录状态,我希望他在关闭浏览器后不会停止20分钟后自动注销。为此,我将createPersistentcookie设置为false,将超时值设置为20mn。

- 如果访问者希望一直保持登录状态,我希望他只有在7天不活动后才能自动登出。关闭浏览器不会将其记录下来。为此,我将createPersistentcookie设置为true,将超时值设置为7天。

您看到了问题:在一种情况下,超时设置为20mn,在另一种情况下,超时设置为7天,但在配置文件中我只能指定1个值。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

问题的标题和第一部分与您最终表达的目标相冲突。

解决第一部分:

您需要自己构建票证,并在COOKIE上明确设置与超时相同的到期时间,然后设置cookie。

这说起来容易做起来难,因为MS的无限智慧不会暴露formsauthentication元素的超时属性。有一个非常简单的解决方法。

请参阅 code in this answer ,了解创建持久票证所需的内容。

总结:你没有做错任何事情,createPersistentCookie功能已被破坏但可以解决。

解决您的既定目标:

使用FormsAuthentication实际上没有干净的方法。任何这样做的尝试都会导致设计良好,安全的系统周围的漏洞很难实现,并且很容易实现和利用。如果您使用表单身份验证尝试此操作,您会发现自己在追逐鬼魂。

祝你好运。

答案 1 :(得分:0)

您可以通过编程方式设置到期时间。可以使用FormsAuthenticationTicket将身份验证Cookie解密为FormsAuthentication.Decrypt()。然后,您可以通过设置到期时间来重新创建票证。

答案 2 :(得分:0)

createPersistentcookie表示当用户关闭浏览器时是否会销毁cookie。您可以指定非常长的生命周期和持久性cookie来记住用户