2010-02-19 51 views
1

我试图在我的网站上实现“记住我”功能,以允许用户保持登录状态而无需再次登录。asp.net FormsAuthentication:如何在配置文件中设置多个超时值?

我做这样的事情:

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

我注意到,因为它依赖于在配置文件中设置的超时值的第二个参数(createPersistentcookie)是不是真的执着。

从我的理解:

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

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

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

我想要做的是:

- 如果游客不希望留在记录所有的时间,我想他是不活动的20MN后自动注销,如果他关闭浏览器。为此,我将createPersistentcookie设置为false,将超时值设置为20mn。

- 如果访问者希望始终保持登录状态,我希望他仅在闲置7天后才能自动登出。关闭浏览器不会将他注销。为此,我将createPersistentcookie设置为true,将超时值设置为7天。

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

有什么建议吗?

回答

0

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

+0

我明白这一点,但它并没有回答这个问题:如果你指定了很长的生命周期,那么即使那些不想保持登录状态的用户也会受到这个影响。想象一下,有人将他的浏览器打开,离开他的桌子,4小时后回来。即使createPersistentcookie = false,他仍将登录。 – Anthony 2010-02-19 17:39:00

1

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

为了解决第一部分:

你需要自己构建的车票,并明确设置上的Cookie一样的超时到期,然后设置Cookie。

这说起来容易做起来难,因为MS中有无限的智慧并没有公开formsauthentication元素的timeout属性。有一个非常简单的解决方法。

查看code in this answer查看创建永久性票证需要什么。

结论:您没有做错任何事,createPersistentCookie功能已破,但可以解决。

为了解决您的既定目标:

实在是没有干净的方式做到这一点使用FormsAuthentication。任何尝试这样做都会导致设计良好,安全的系统周围出现脆弱的黑客攻击,而这些系统的实施和利用都很简单。如果您尝试使用表单身份验证,您会发现自己正在追逐鬼魂。

祝你好运。

相关问题