2010-09-12 2 views
0

Я реализую Forms Authentication в ASP.NET с C# (версия 3).Аутентификация форм ASP.NET аутентифицируется на сервере localhost, но не на веб-сервере

Я создал простую форму для входа, когда пароли пользователей & хранятся в моем SQL-db.

Когда я вхожу в систему на своем локальном хосте, все работает нормально, но когда я опубликовал проект и загрузил его на свой веб-сервер, все стало для меня немного странным.

Возвращаемое значение переменной HttpContentxt.Current.User.Identity.IsAuthenticated ложно, даже если логин был успешным (и снова в локальном хосте все работает нормально).

Это следующая кнопка Войти код нажмите (Я использую свой собственный DATAACCESS, игнорировать это ненужный код):

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     Page.Validate("Login"); 
     if (Page.IsValid) 
     { 
      string email = txtEmail.Text; 
      string passwd = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "MD5"); 
      WebFactory.DataAccess.Users.Data userData = new WebFactory.DataAccess.Users.Data(ConnectionString); 
      userData.Load(new WebFactory.DataAccess.Users.Item[] { 
       new WebFactory.DataAccess.Users.Item(WebFactory.DataAccess.Users.Columns.Email, email), 
       new WebFactory.DataAccess.Users.Item(WebFactory.DataAccess.Users.Columns.Password, passwd) 
      }); 
      if (userData.HasData) // Login Success 
      { 
       if (!cbRememberMe.Checked) 
       { 
        FormsAuthentication.SetAuthCookie(userData.Id.ToString(), false); 
       } 
       else 
       { 
        FormsAuthentication.Initialize(); 
        DateTime expires = DateTime.Now.AddDays(20); 
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
         userData.Id.ToString(), 
         DateTime.Now, 
         expires, 
         true, 
         String.Empty, 
         FormsAuthentication.FormsCookiePath); 

        string encryptedTicket = FormsAuthentication.Encrypt(ticket); 
        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
        authCookie.Expires = expires; 
        Response.Cookies.Add(authCookie); 
       } 
       lblStatus.Text = ""; 
       if (Common.QS.HasRefUrl) 
       { 
        Response.Redirect(Common.QS.RefUrl); 
       } 
       else 
       { 
        Common.UserTools.RedirectLoggedInUser(userData.Id); 
       } 
      } 
      else // Login failed 
      { 
       lblStatus.Text = "Email or password is wrong. please try again." 
      } 
     } 
    } 

Спасибо за все хелпер, и жаль английских ошибки.

ответ

5

Спасибо всем, я решил проблему.

Мне просто нужно было ввести атрибут name в статье <forms>, и теперь все работает отлично.

Еще раз спасибо!

+0

привет, извините, что мертвая нить жива, но что вы имеете в виду добавить атрибут имени в предложение ? im, используя mvc 3.0, и я мог бы войти в систему, но после минуты нажатия он перенаправит меня на страницу входа еще раз. но в моем локальном хосте он отлично работает. Любая помощь приветствуется. благодаря! – gdubs

2

Попробуйте проверить конфигурацию проверки подлинности форм в файле web.config. В частности, переменные домена и пути. Домен должен соответствовать домену вашего сайта, и путь должен соответствовать имени папки приложения. У вас, вероятно, не будет ни одного из них, поэтому просто установите его в «/»

Вы также можете настроить трассировку, чтобы убедиться, что файл cookie на самом деле читается приложением.

+0

Привет, Джейсон, спасибо за ответ. Я установил атрибуты «domain» и «path» в предложении , но все равно никаких изменений. IsAuthenticated все еще остается ложным после входа в систему. – geevee

+0

Привет, Гал V. Является ли свойство IsAuthenticated истинным, когда проверяется cbRememberMe? –

Смежные вопросы