UserID как свойство

У меня проблема с моим классом ниже:

Я пытаюсь держать UserID без Session и, конечно, Querystring, я думал, что могу сохранить его в своем UserClass.

Поэтому, когда я пытаюсь получить идентификатор, например: Default.aspx:

MyUserClass  userclass=new MyUserClass();//global

//(at button click)
userclass.GetUser(TextBox1.Text, TextBox2.Text);
int UserID=userclass.UserID;

когда я перезагружаю страницу UserID=0, я получаю нормально. Затем я попытался использовать статическую переменную для этого. пример:

static MyUserClass  userclass=new MyUserClass(); //global
//(at button click)
    userclass.GetUser(TextBox1.Text, TextBox2.Text);
    int UserID=userclass.UserID;

я получаю идентификатор, когда я также перезагружаю страницу, но когда кто-то еще входит, мой идентификатор меняется вместе с другим идентификатором

Как я могу сделать это таким образом или я имею в виду со свойствами?

Класс это:

public class MyUserClass
{
    private  int _UserID;
    public  int UserID
    {
        get
        {
            return _UserID;
        }
    }


    public int  GetUser(string UserName, string Pass)
    {
        int UserID=0;
        try
        {

            DB.conn.Close();

            SqlCommand command = new SqlCommand("pUserkontrol", DB.conn);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@puserName", UserName);
            command.Parameters.AddWithValue("@pPass", Pass);
            DataTable dt = new DataTable();
            DB.conn.Open();
            SqlDataReader dr = command.ExecuteReader();

            dt.Load(dr);
            DB.conn.Close();
            if (dt.Rows.Count < 1)
            {

            }

            else
            {
                foreach (DataRow datarow in dt.Rows)
                {
                    _UserID = Convert.ToInt32(datarow["UserID"]);
                    //UserID = _UserID;



                }

            }
        }
        catch (Exception ex)
        {



        }



        return UserID;


    }
}

1 ответ

Решение

Сеть по своему характеру не имеет состояния, и поэтому каждый новый запрос "перезаписывает" значение UserId в том виде, в каком оно есть, и ничто не связывает запрос обратно с вашим классом. Вам нужно использовать какой-то механизм хранения. Поскольку вы отказались от использования сеанса и строки запроса, я бы посоветовал свернуть вашего собственного облегченного поставщика членства ASP.NET и внедрить IIdentity и IPrincipal и создать билет проверки подлинности (Cookie) через поставщика, чтобы сохранить ваши данные после входа в систему (userId). Взгляните на блог Брэди Гастерса и комментарии, опубликованные там, чтобы узнать, как это сделать.

http://www.bradygaster.com/custom-authentication-with-mvc-3.0

Этот пост реализует членство в MVC 3 с использованием Sessions, однако комментарии и другие ссылки на странице показывают, как манипулировать кодом и использовать куки-аутентификацию. Реализация его в веб-формах (если вы используете веб-формы) также должна быть достаточно простой.

Другие вопросы по тегам