好的,我已经被分配了在登录页面上使用的身份验证。我已经在这方面工作了很长一段时间,并决定将其清理干净。我遇到的问题是没有抛出异常,没有生成错误,一切看起来都没问题的问题之一,但是当你尝试使用一个函数时,它会返回一个你不想要的结果。
我使用的代码与此页面中的代码非常相似:
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);
因此,如果我登录,一切正常,下面的代码评估为true: HttpContext.Current.User.Identity.IsAuthenticated;
但是,如果我想使用任一版本将子键包含到myCookie中:
myCookie.Values.Add("userName", "patrick"); //version 1
myCookie.Values["userName"] = "patrick"; //version 2
然后你添加到cookies集合:
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始终是假的,登录和验证与否。任何人都可以尝试解释这是怎么回事?我有一个有效的解决方案,但任何见解都会有所帮助。
答案 0 :(得分:0)
好的,我想我想出来了。这是因为我的web.config是如何设置表单身份验证的。使用表单标记。
FormsAuthenticationTicket查看该标记以获取特定信息,如果我没有创建cookie,则不会对我进行身份验证。这也违反了无Cookie模式到UseCookies。
但是无论如何,在我创建了一个cookie之后,我会被认证,然后为我创建一个新的会话。之后,我可以提供我想要的任何额外的cookie,并让网站根据需要使用它们。但只要AuthCookie(在我的情况下是.ASPXAUTH)有效,我的身份验证会话也是如此。
事实上,当我尝试在浏览器关闭时结束cookie会话时,通过为cookie和票证设置MinValue的截止日期,我也无法进行身份验证!我必须让票的持续时间比实际的cookie长,这样票证才会在cookie之前到期。
故障单信息实际上是用于创建cookie的配置,在创建cookie之后,浏览器定义了cookie的使用方式。