2015-08-05 3 views
0

Я установил стандартное приложение ASP.NET Webforms на своем ПК. На страницах входа хранится 3 переменные сеанса; имя пользователя, пароль и перенаправление.Переменные сеанса не распространяются

Из того, что я видел, я могу использовать Session["user"] = username или Session.Add("user", username); для установки переменных.

Как только переменные были установлены, я перенаправляюсь на другую страницу, которая выполняет некоторые дополнительные проверки подлинности.

В приемной странице, я следующий

protected void Page_Load(object s, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     var user = (string)(Session["user"]); 
    } 
} 

Когда я пришел, чтобы посмотреть на пользователя, хотя, это нуль.

Все, что у меня установлено, это значения из коробки.

Дополнительная информация

В моей вызывающему, сессия устанавливается как этот

if (user.UserName == "admin") 
{ 
    Session.Add("user", UserName.Text); 
    Session.Add("pass", Password.Text); 
    Session.Add("redir", Request.QueryString["ReturnUrl"]); 
    Response.Redirect("SecondPage.aspx", false); 
} 

В моей SecondPage.aspx

if (!IsPostBack) 
    { 
     ReturnUrl = (string)(Session["redir"]); 
     Username = (string)(Session["user"]); 
     Password = (string)(Session["pass"]); 
    } 

(ReturnUrl, Имя пользователя и пароль только просто прибудете; установленные свойства)

** Дополнительный

Чтобы убедиться, что я не теряю свой мрамор, я выполнил еще два теста.

Сначала я добавил к Page_Load для первой страницы следующего

Session["fish"]="chips"; 

Затем я прочитал, что еще в течение Page2 и «фишек» шоу.

Далее я создал статический класс и присвоил свойствам класса и попытался прочитать, что внутри. - все они были пустыми, несмотря на то, что они были установлены (и протестированы) перед перенаправлением на страницу2.

Это меня озадачило!

+1

Как вы определяете, что это null? Эта переменная 'user' существует только внутри этого оператора' if'. Если вы посмотрите на переменную 'user' в другом месте, это другая переменная. – Guffa

+2

Я не могу воспроизвести это. Можете ли вы представить более полный пример, демонстрирующий проблему? Я подозреваю, что ошибка в другом месте. – David

+0

@Guffa - я тестирую переменную в if (Console.WriteLine (пользователь);) – Nodoid

ответ

1

Я предполагаю, что ваш оператор if устанавливает переменные сеанса внутри кнопки? В противном случае вы устанавливаете их сразу на значение пустых текстовых полей. Упростите свой код, чтобы проверить, есть ли проблема. Поместите это в каждую страницу Page_Load (не в! IsPostBack).

Page один

Session["user"] = "test user"; 

Page два

//set breakpoint here 
var user = Session["user"].ToString(); 

Это покажет вам, если существует реальная проблема или если есть только проблема с тем, как вы пытаетесь использовать его. Также убедитесь, что ваше состояние сеанса установлено в «inproc» в файле web.config.

<system.web> 
     <sessionState mode="InProc" 
        timeout="20"/> 
     </sessionState> 
</system.web> 
+0

Настройка выполняется в пределах нажатия кнопки, а затем только после подтверждения имени пользователя. Я пробовал читать Session ["user"] в Page2, но он выводится как null. Я получаю те же нулевые результаты, если попытаюсь установить ViewState для хранения значений вместо сеанса. В обоих случаях Session и ViewState показывают 3 клавиши. – Nodoid

+0

ViewState не подходит для этого. Как сказал Стивен Брикнер, проверьте свой web.config, чтобы убедиться, что состояние сеанса настроено правильно. – Phil

+0

@Nodoid ViewState относится только к конкретному экземпляру страницы, вы не можете использовать его для обмена данными между страницами. – mason

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