2011-08-10 25 views
0

林。 要检查如果用户已经验证过了,我用User.Identity.IsAuthenticated。 大多数时间它工作完美,但我不知道怎么了,有时它返回false即使用户有权威性。 我的web.config:User.Identity.IsAuthenticated使用asp.net 4.0和表AUTH返回false有时

<authentication mode="Forms"> 
    <forms name=".xyz" loginUrl="~/" timeout="120" protection="All" path="/" slidingexpiration=true/> 
</authentication> 

在Global.asax中:

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
    string cookieName = FormsAuthentication.FormsCookieName; 
    HttpCookie authCookie = Context.Request.Cookies[cookieName]; 

    if (authCookie == null) 
    { 
     return; 
    } 
    FormsAuthenticationTicket authTicket = null; 
    try 
    { 
     authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
    } 
    catch 
    { 
     return; 
    } 
    if (authTicket == null) 
    { 
     return; 
    } 
    string[] roles = authTicket.UserData.Split(new char[] { '|' }); 
    FormsIdentity id = new FormsIdentity(authTicket); 
    GenericPrincipal principal = new GenericPrincipal(id, roles); 

    Context.User = principal; 
} 

和登录页面:

FormsAuthenticationTicket authTick = new FormsAuthenticationTicket(1, email.Text, DateTime.Now, DateTime.Now.AddDays(360), true, password.Text, FormsAuthentication.FormsCookiePath); 
string encriptTicket = FormsAuthentication.Encrypt(authTick); 

HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encriptTicket); 
authCookie.Expires = DateTime.Now.AddDays(360); 
Response.Cookies.Add(authCookie); 

我也用在每5分钟Ajax请求。使会话保持活动状态,并且这也会重置auth超时,因为滑动灵感值。 我不知道它有什么问题。有时是同一会话,并且在同一分钟内,即使对于其他页面返回true,也会为一个页面返回false。我从来没有得到这个错误,但我的访问者声称这个问题。

+0

你尝试Context.Request.IsAuthenticated? – VJAI

+0

没有。它更可靠吗? – genesistr

回答

2

我发现这个问题。问题在于www.address.com和address.com之间的区别。 www版本假装像一个子域,并创建新的会话和身份验证。如果用户在没有www前缀的情况下重定向到www地址,则会发生错误。我会尝试通过URL重写来解决它。

+0

对我而言,这是一个我忘了的Web.config转换。 –

+0

@DaviddCeFreitas,你能提供有关您的解决方案 –

+0

@ebramtharwat更多的细节,我有那些生产/研发web.config.debug样的变换是建设之后改变值的一个文件。尝试在Visual Studio浏览器中展开web.config文件,或者检查您的项目文件夹,如果您有其他web.config。*文件可能正在转换或更改构建时的值。 –

相关问题