none
================== 写过无数次的代码,自信心受到很大的打击。。。有关Request.IsAuthenticated ==================== RRS feed

  • 问题

  • 已经将代码放到这里.

    https://skydrive.live.com/redir?resid=4D9CD22D50108C94!165

    很简单的登录功能。环境visual studio 2012 ,4.5 framework,iis express

    public static class Users
        {
            private static readonly List<Tuple<string, string, string>> vals;
    
            static Users()
            {
                vals = new List<Tuple<string, string, string>>();
                vals.Add(new Tuple<string, string, string>("userName", "pwd", "group1"));
               
            }
    
            public static Tuple<string, string, string> Login(string userName, string pwd)
            {
                return vals.FirstOrDefault(x => x.Item1 == userName && x.Item2 == pwd);
            }
    
        }

    login.aspx登录页

    protected void btnOk_Click(object sender, EventArgs e)
            {
                var result = Users.Login(userName.Text,pwd.Text);
                if (result != null)
                {
                    string userDataString = result.Item3;
                    HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName.Text, RememberMe.Checked);
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
                    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userDataString);
                    authCookie.Value = FormsAuthentication.Encrypt(newTicket);
                    Response.Cookies.Add(authCookie);
                    string redirUrl = FormsAuthentication.GetRedirectUrl(userName.Text, RememberMe.Checked);
                    Response.Redirect(redirUrl);
                }
                else
                {
                    lblmsg.Text = "用户名或密码错误";
                }
            }

    登录后的页面main.aspx

    protected void Page_Load(object sender, EventArgs e)
            {
                if (Request.IsAuthenticated)
                {
                    FormsIdentity ident = User.Identity as FormsIdentity;
                    if (ident != null)
                    {
                        FormsAuthenticationTicket ticket = ident.Ticket;
                        string userDataString = ticket.UserData;
                        lblmsg.Text = userDataString;
                    }
                }
                else
                {
                    lblmsg.Text = "请求未通过验证";
                }
            }

    Request.IsAuthenticated这里总是返回false.

    自信心受到很大的打击。。

    各位朋友帮忙看看

    2013年1月6日 3:17

答案

全部回复

  • 你用 Fiddler 抓下包,看看你的响应和请求里是否包含Cookie。

    2013年1月6日 3:26
  • 你用 Fiddler 抓下包,看看你的响应和请求里是否包含Cookie。

    我在main.aspx中Page_Load时断开,cookie都是存在的

    2013年1月6日 3:33
  • 你用 Fiddler 抓下包,看看你的响应和请求里是否包含Cookie。

    问题是这样的代码我以前不知道写过多少次了,从未遇到过这样的问题。
    2013年1月6日 3:34
  • 为什么要抓包呢?就是观察实际的运行情况是否是正确的,如果login后,response 包含cookie,访问 main 的时候又将此cookie携带上了,那么没有通过验证,就只能说明服务器在验证cookie时失败了,这时候你就需要调试一下看看为什么会验证失败,比如做NLB时的machinekey不一致。如果访问 main 的时候没有携带 cookie,你就要看看是不是cookie的域名和你的网站域名不匹配,导致浏览器不识别。当然,我这里只是举了一些常见的错误,并不能概括所有的情况。
    2013年1月6日 3:54
  • 已经找到原因了。。

    感谢您的回复。

    忘了最基本的 mode="Forms" 了。。

    2013年1月6日 5:49