//1,这是孟子书上的代码,在另一页可以取到userdata的值。
FormsAuthentication.RedirectFromLoginPage(userName, false);
            HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, false);
            string userData = modelUser.Code;
            
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);            FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
                ticket.Version,
                ticket.Name,
                ticket.IssueDate,
                ticket.Expiration,
                ticket.IsPersistent,
                userData,
                ticket.CookiePath);
            string encryptedTicket = FormsAuthentication.Encrypt(newTicket);
            cookie.Value = encryptedTicket;
            Response.Cookies.Add(cookie);
            Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));//2,这是我自己改的。userdata的值为空,但是ticket的name正确。不解。
            HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, false);
            string userData = modelUser.Code;
            
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);            FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
                ticket.Version,
                ticket.Name,
                ticket.IssueDate,
                ticket.Expiration,
                ticket.IsPersistent,
                userData,
                ticket.CookiePath);
            string encryptedTicket = FormsAuthentication.Encrypt(newTicket);
            cookie.Value = encryptedTicket;
            Response.Cookies.Add(cookie);
            FormsAuthentication.RedirectFromLoginPage(userName, false);
        }能否解释下这段代码的原理和执行过程及其内在实现。
FormsAuthentication.RedirectFromLoginPage(userName, false);MSDN上解释是转向,故我把它去掉。
好象表达的差不多了。谢谢。

解决方案 »

  1.   

    Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, chkPersist.Checked), false);//FormsAuthentication.RedirectFromLoginPage方法会重写cookie,不要使用这个方法。
    //FormsAuthentication.RedirectFromLoginPage(userName, false);MSDN在备注中也说明了:当您希望在应用程序代码中执行重定向时可使用此方法,而不使用 RedirectFromLoginPage 方法。
      

  2.   

    Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));//FormsAuthentication.RedirectFromLoginPage方法会重写cookie,不要使用这个方法。
    //FormsAuthentication.RedirectFromLoginPage(userName, false);MSDN在备注中也说明了:当您希望在应用程序代码中执行重定向时可使用此方法,而不使用 RedirectFromLoginPage 方法。
      

  3.   

    呵呵,看这个,明白了
    http://nyf1220.blog.hexun.com/4834307_d.html
      

  4.   

    FormsAuthentication.RedirectFromLoginPage(userName, false);重写了cookie,你想加ticket,只能自己写cookie
    可以象下面的方法
    //FormsAuthentication.RedirectFromLoginPage(userName, false); Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    string returnUrl = Request.Params["ReturnUrl"];
    if(returnUrl == null)
    Response.Redirect("index.aspx");
    else
    Response.Redirect(returnUrl);
    //FormsAuthentication.RedirectFromLoginPage(StrUsername,false);