在FormAuthentication方法中查询IsPersistant参数

时间:2012-03-27 13:38:49

标签: c# asp.net asp.net-3.5

ASP.NET提供了以下手动创建表单身份验证cookie的方法

public FormsAuthenticationTicket(int version, string name, System.DateTime issueDate, System.DateTime expiration, bool isPersistent, string userData, string cookiePath)

如果我将isPersistent设置为false并将expiration设置为更大的值(如从现在开始的1周),该怎么办?在这种情况下,当用户关闭浏览器时将会发生什么情况,如果再次打开浏览器,他将被认证。据我所知,设置isPersistant为false(在这种情况下无论是否过期日期)意味着用户在关闭浏览器后不会被认证,并且在重新打开浏览器后将是匿名用户。

isPersistant为false且有效的到期日期同时意味着什么?

2 个答案:

答案 0 :(得分:0)

身份验证数据将包含在每个请求/响应中,而不会保留在Cookie中。当用户关闭并重新打开浏览器时,需要进行新的身份验证。

请参阅此主题以获取大量信息:The definitive guide to form-based website authentication

答案 1 :(得分:0)

使用类似下面的代码,您的cookie将持续一周,直到它过期:

HttpCookie theCookie = FormsAuthentication.GetAuthCookie("theUser", false);

theCookie.Expires = DateTime.Now.AddDays(7);

Response.SetCookie(theCookie);

"持久性"之间的唯一区别cookie和一个不是,到期时间设置为"会话"在后者。确认这一点的最简单方法是测试它。从我的简短试验中,它没有发生任何事故。

您引用的类主要由 FormsAuthentication 在内部使用,我认为它不应该是您的主要方法如果可以通过FormsAuthentication类上的静态成员函数来实现您的目标,那么这是作为帮助您访问库所包含的所有功能的帮助。 FormsAuthenticationTicket类是FormsAuthentication.Decrypt的输出,例如,它将为您提供有关在cookie值中加密的数据的信息。在代码中创建身份验证cookie不是您应该使用的。

修改

关于它"意味着"如果两个属性同时设置,则意味着,如果加密票证数据中存在持久标志,则一旦票证过期,每次用户访问时都会续订。 FormsAuthentication会致电FormsAuthentication.RenewTicketIfOld无限期地保留此机票。使用FormsAuthentication.SetAuthCookieFormsAuthentication.GetAuthCookie帮助程序方法标记票证持久性时的默认行为将初始化票证的加密数据,并将到期日设置为创建票证的当前日期和时间。这可以通过拨打FormsAuthentication.GetAuthCookie并使用您收到的FormsAuthentication.Decrypt的{​​{1}}属性调用Value来确认。如果您检查故障单的HttpCookie属性,您会发现它设置为当前日期和时间。