好的,我被分配了在登录页面上使用的身份验证。我已经为此工作了很长时间,并决定清理它。我面临的问题是没有抛出异常,没有生成错误,一切看起来都很好,但是当你尝试使用一个函数时,它会返回一个你不想要的结果。
我使用的代码看起来与此页面中的代码非常相似:
http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx
我在我的项目中使用了演示中的代码:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
isPersistent,
userData,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
// Create the cookie.
Response.Cookies.Add(myCookie);
因此,如果我登录,一切正常,下面的代码评估为真:HttpContext.Current.User.Identity.IsAuthenticated;
但是,如果我想使用任一版本将子键包含到 myCookie 中:
myCookie.Values.Add("userName", "patrick"); //version 1
myCookie.Values["userName"] = "patrick"; //version 2
然后添加到 cookie 集合中:
Response.Cookies.Add(myCookie);
然后登录后刷新页面:
//This always set to false even after successful log on
HttpContext.Current.User.Identity.IsAuthenticated;
不知道为什么!
我想做一些我不必立即将加密值添加到 httpcookie 的事情:
//IsAuthenticated doesn't work = false
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormCookieName);
cookie.Values.Add("encryptTicket", encTicket);
添加子键根本不起作用,这很奇怪。而且我被迫加密一张票以使其正常工作。我的意思是,无论是否登录和验证,IsAuthenticated 始终为假。任何人都可以尝试解释这是怎么回事吗?我有一个可行的解决方案,但任何见解都会有所帮助。