2013-10-03 6 views
0

Я создаю проект резервирования билетов на кино. Я хочу, чтобы получить имя пользователя из стр.1 и отображать его на page2 (с помощью переменной сеанса)Моя переменная сеанса всегда равна нулю

Page1:

string uname = TextBox1.Text; 
Session["UName"] = uname; 
Session.Timeout = 30; 

PAGE2:

if ((string)Session["UName"] != null) 
     { 
      string user = (string)Session["UName"]; 
     } 

и я поставил кнопку в page2 знак, чтобы удалить значение переменной сеанса. Но переменная сессии всегда равна нулю. Я уже использовал файлы cookie на странице 1, и это будет причиной? или что еще? Пожалуйста помоги. Заранее спасибо.

+1

ли Вы использовать MasterPages? –

+0

И действительно ли TextBox1.Text имеет значение? Прошлый код больше .... –

+0

Вы преждевременно удаляете 'Сессию' на странице 2? Убедитесь, что любая функция, которую вы используете для очистки сеанса, случайно не запускается. – Kami

ответ

1

Смотрите этот ответ о том, когда сессия может быть пустой:

What should I do if the current ASP.NET session is null?

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

1

Это обычно происходит при выполнении Response.Redirect после установки переменной сеанса. Вы можете обойти эту проблему, вызвав перегрузку вместо:

Response.Redirect("...", false); // false = don't stop execution 

//causes ASP.NET to bypass all events and filtering in the HTTP pipeline 
//chain of execution and directly execute the EndRequest event 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Основной проблемой является ThreadAbortException, который часто игнорируется, поскольку это не нарушает приложение. Это известная проблема, и вы можете узнать больше об этом здесь: http://support.microsoft.com/kb/312629.

Side Примечание

На стороне записки, не следует сбросить значение Session.Timeout в коде, как это. Я не могу быть уверен, но это может также негативно повлиять на вашу логику. Вместо этого, вы должны указать тайм-аут сеанса в web.config под system.web разделе:

<sessionState timeout="60" /> 
+0

Я уже пробовал, но он не работает. Я очень долго борюсь с этой проблемой. – user2842987

+1

@ user2842987: Можете ли вы опубликовать еще какой-нибудь код? –

+0

@JamesJohnson Это действительно сработало для меня. Спасибо –

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