Как правильно реализовать пользовательскую систему для сеансов - PullRequest
0 голосов
/ 27 января 2011

Я никогда ранее не реализовывал систему регистрации / входа в систему, поэтому я пытаюсь сделать свою собственную в C # / ASP.NET (не используя встроенный поставщик членства ASP.NET).Что мне немного неясно, так это как использовать Сеанс / куки для входа пользователя во время и между сеансами.

protected void Login_User(object sender, EventArgs e)
{
    string username = usernameField.Text;
    string password = passwordField.Text;
    User user = UserRepository.FindUser(username);
    if (user != null)
    {
        if (user.Password.Equals(Hash(password)))
        {
            // How do I properly login the user and keep track of his session?
        }
        else
            Response.Write("Wrong password!");
    }
    else 
        Response.Write("User does not exist!");
}

Ответы [ 3 ]

0 голосов
/ 27 января 2011

это довольно сложно для правильной системы входа в систему.

  1. создать класс, который наследует System.Security.Principal.IPrincipal
  2. другой класс, который наследует System.Security.Principal.IIdentity
  3. Назначьте IPrincipal производное для System.Web.HttpConext.Current.User
  4. , если вы не хотите использовать куки, поместите ваш IPrincipal в Session.
  5. , если HttpContext.Current.User isпотерян, а затем переназначить с помощью get из сеанса (в самом первом событии, например, page_init).для своего кода я использую FormsAuthenticationTicket в качестве cookie и переназначаю в Global.asax событие PostAuthenticateRequest

хорошая вещь использования HttpContext.Current.User - вы можете пометить атрибут метода.

[Authorize] // authorized user only
public void btn_click(...){...}

я не уверен в нормальном asp.net, но он очень хорошо работает в asp MVC

, если вы хотите использовать куки, попробуйте System.Web.Securitiy.FormsAuthenticationTicket и FormsAuthentication

образец

public class WebUser:System.Security.Principal.IPrincipal
{
  ...
  public System.Security.Principal.IIdentity Identity{get; private set;}
  public WebUser(...)
  {
    this.Identity = new WebIdentity(...);
    HttpContext.Current.User = this;
  }
}
public class WebIdentity : System.Security.Principal.IIdentity
{
  ...
}

public void Login(...)
{
  var newUser = new WebUser(...);
}
0 голосов
/ 27 января 2011

Используйте это:

public class FormsAuthenticationService 
{
    public void SignIn(string userName, bool createPersistentCookie)
    {
        if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }

    public void SignOut()
    {
        FormsAuthentication.SignOut();
    }
}
0 голосов
/ 27 января 2011

Вы можете использовать RedirectFromLogin , чтобы перенаправить на страницу, которую пользователь запросил, но не смог посетить из-за аутентификации или если вы хотите сохранить контроль над тем, куда перенаправляется пользователь, вы можете использовать SetAuthCookie

...