Как получить доступ к значению из кода в глобальном asax

На моей странице я регенерирую идентификатор сеанса при каждом нажатии кнопки, чтобы перейти на следующую страницу. Я уже сохранил имя пользователя в своей переменной сеанса (session["uname"]=txtusername.text) во время входа в систему. Но когда я регенерирую новый идентификатор сеанса, session["uname"] имеет нулевую ссылку, потому что нового идентификатора сеанса. Вот почему я хочу установить значение переменной сеанса, используя Global.asax в функции запуска сеанса.

void Session_Start(object sender, EventArgs e) 
    {
       session["uname"]=here;
    }

Но здесь, на странице Global.asax, я не могу получить доступ к каким-либо значениям со своей страницы входа.. Основная проблема заключается в доступе к любому значению в global.asax из кода позади. Как я могу решить эту проблему......Помогите пожалуйста......Заранее благодарен...... ........


person Sudip Roy    schedule 18.07.2012    source источник
comment
Вам следует взглянуть на сохранение информации на уровне страницы каким-либо другим способом вместо доступа к элементу управления в Global.asax. Кроме того, могу ли я спросить, почему вам нужно каждый раз заново генерировать идентификатор сеанса?   -  person rikitikitik    schedule 19.07.2012


Ответы (2)


Во-первых, не пишите бизнес-логику в Global.asax. Я хочу указать вам на 3 основные вещи:

  1. Когда вызывается session_start()
  2. Как поддерживаются сеансы
  3. Где вы должны установить свои переменные сеанса.

Для следующих сведений я предполагаю, что у вас есть login.aspx, login.aspx.cs:

Как вы знаете, HTTP — это протокол без сохранения состояния, поэтому каждый запрос — это новый запрос. Таким образом, для каждого запроса будет выполняться session_start().

Когда пользователь запрашивает ресурс в первый раз, будет сгенерирован уникальный сеанс, и клиенту будет отправлен файл cookie, содержащий идентификатор сеанса.

Для любого дальнейшего запроса от пользователя HTTP-клиент передаст файл cookie на сервер, чтобы сервер мог отслеживать пользователя. Вот как работает сессия.


Теперь давайте перейдем к вашему коду, который вы устанавливаете Session["uname"] в session_start() Gloabl.asax, имейте в виду, что Globlax.asax вызывается до начала жизненного цикла страницы, поэтому он не имеет доступа к данные страницы.

Вместо этого вы должны установить сеанс ["uname"] в файле login.aspx.cs. Здесь проверьте правильность учетных данных пользователя:
установите Session["uname"]=value.

Теперь для каждого другого запроса Session["uname"] для этого пользователя будет доступен. И вы также можете получить/обновить значения в session_start() Global.asax.

person Community    schedule 19.07.2012
comment
Почему я должен использовать постоянный сеансовый ключ uname на нескольких уровнях? Например, я могу установить или получить текущий языковой стандарт сеанса с помощью HttpContext.Current.ApplicationInstance, который я привел к моему коду global.asax позади класса, поэтому мне не нужно использовать ключ, такой как "uname", в моем коде. - person djmj; 22.08.2012

person    schedule
comment
thnks v much...bt Основная проблема заключается в доступе к любой переменной/управляющему значению из кода позади страницы global.asax. Я не могу получить доступ к значению текстового поля со страницы входа или любой переменной в global.asax. ... - person Sudip Roy; 19.07.2012