web.config Code
<authentication mode="Forms">
        <forms loginUrl="Login.aspx" defaultUrl="CouponHome.aspx"  protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
    </authentication>
login.aspx codeprotected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.txtName.Text = "[email protected]";
            this.txtPwd.Text = "111111";            try
            {
                if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
                {
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
                    string q1 = ticket.Name;
                    if (q1 != string.Empty && Context.Request["ReturnUrl"] != null)
                    {
                        Response.Redirect(Context.Request["ReturnUrl"]);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message);
            }
        }    }........
(登陆成功后调用一个方法,设置Cookies)
  public void SetUserCookies()
    {
        if (CheckBox1.Checked)
        {
            FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(
                                                                             1, UD.Email, 
                                                                             DateTime.Now, 
                                                                             DateTime.Now.AddYears(1), 
                                                                             true, 
                                                                             Request.UserHostAddress, 
                                                                             "/");            string HashTicket = FormsAuthentication.Encrypt(Ticket);
            HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
            if (Ticket.IsPersistent)
            {
                UserCookie.Expires = Ticket.Expiration;
            }
            HttpContext.Current.Response.Cookies.Add(UserCookie);
        }        if (Context.Request["ReturnUrl"] != null)
        {
            FormsAuthentication.RedirectFromLoginPage(UD.Email, false);
        }
        else
        {
            Response.Redirect(FormsAuthentication.DefaultUrl);
        }
    }
出现的Bug:登陆页面上,有两个TextBox,和一个CheckBox(下次记住我);填写正确的用户名和密码,不选中CheckBoX,点击登陆按钮,页面刷新一次,第二次重新输入用户名和密码,才能正常登陆;盼望高手相助,小弟在线等,在线调试,成功后,马上付分,一言既出,驷马难追,谢谢,小弟站到旁边看着去

解决方案 »

  1.   

    我是小弟.不懂..  path="/"  会不会导致Login.aspx也要登陆才能访问?
      

  2.   

    也就是说,打开网站,第一次输入正确的用户名和密码;红色标识的那句代码没有执行了,但并不是跳转到web.config中设置的默认页,Why?
            if (Context.Request["ReturnUrl"] != null) 
            { 
                FormsAuthentication.RedirectFromLoginPage(UD.Email, false); 
            } 
            else 
            { 
                Response.Redirect(FormsAuthentication.DefaultUrl); 
            }
      

  3.   

    没看你代码:你把      if (!IsPostBack) 去掉试试~
            
      

  4.   

    回一楼大哥:
         在Web.config公开了 Login.aspx页的权限了,测试还是不行;谢谢您的回答
      

  5.   

     if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
                    { 
    这儿...验证票产生的cookie是在内存中的,当你关闭页面,自动删除...你第一次登录产生cookie,第二次次执行 if(....){这里面的代码.........}
      

  6.   

    回七楼大哥:
    小弟不是很明白,希望您能详细的指点下小弟代码应该怎样修改;
    我是这样理解的,if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 这句是写在  登陆页面的 Page_Load事件里的;当打开这个页面首先看看机器上有没有该站产生的Cookie,有的话直接到主页,跳过了登陆页;如果Request.Cookies[FormsAuthentication.FormsCookieName] == null ,那就让用户输入登陆名和密码;而问题是:首次登陆,也就是Cookie为空,并不选择“记住我”,正确的用户名和密码要登陆两次,不知道错哪里了?小弟愚钝,望大哥不吝赐教,小弟唯有以分和仰慕之情相谢
      

  7.   


    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, UD.Email, DateTime.Now, DateTime.Now.AddYears(1), false, UD.Email, FormsAuthentication.FormsCookiePath);
    刚没看你怎么 new的,不好意思...你这么改下。
      

  8.   

    回九楼大哥:
            问题解决了,刚我自己又鼓捣鼓捣,知道自己错在那里了;2, UD.Email, DateTime.Now, DateTime.Now.AddYears(1), false,
           谢谢九楼,谢谢
            下面开始送分...