我正在尝试在我的网站上实现“记住我”功能,以允许用户无需再次登录即可保持登录状态。
我这样做:
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个值。
有什么建议吗?
答案 0 :(得分:1)
问题的标题和第一部分与您最终表达的目标相冲突。
解决第一部分:
您需要自己构建票证,并在COOKIE上明确设置与超时相同的到期时间,然后设置cookie。
这说起来容易做起来难,因为MS的无限智慧不会暴露formsauthentication元素的超时属性。有一个非常简单的解决方法。
请参阅 code in this answer ,了解创建持久票证所需的内容。
总结:你没有做错任何事情,createPersistentCookie功能已被破坏但可以解决。
解决您的既定目标:
使用FormsAuthentication实际上没有干净的方法。任何这样做的尝试都会导致设计良好,安全的系统周围的漏洞很难实现,并且很容易实现和利用。如果您使用表单身份验证尝试此操作,您会发现自己在追逐鬼魂。
祝你好运。答案 1 :(得分:0)
您可以通过编程方式设置到期时间。可以使用FormsAuthenticationTicket将身份验证Cookie解密为FormsAuthentication.Decrypt()。然后,您可以通过设置到期时间来重新创建票证。
答案 2 :(得分:0)
createPersistentcookie表示当用户关闭浏览器时是否会销毁cookie。您可以指定非常长的生命周期和持久性cookie来记住用户