2015-08-30 3 views
0

Я пытаюсь сохранить сеанс в классе для MVC-приложение. Ниже приведен код, который я использовал, чтобы получить и установить сеанс в переменной. Но всякий раз, когда я получаю доступ к этой переменной после набора, она дает null.Поддержание сеанса в классе C#

public static class MySession 
{ 
    public static string MyVar 
    { 
     get 
     { 
      return HttpContext.Current.Session["MyVar"] == null ? "" : HttpContext.Current.Session["MyVar"].ToString(); 
     } 
     set 
     { 
      HttpContext.Current.Session["MyVar"] = value; 
     } 
    } 
} 

И я использовал, чтобы установить, как MySession.MyVar="testData";

Но когда я получить доступ к string str = MySession.MyVar;

это дает null значение. Кто-нибудь знает, почему моя сессия не хранится?

ответ

0

Мое предположение: вы не включили состояние сеанса.

<system.web> 
    <sessionState mode="InProc" timeout="60"/> 
<system.web> 

Состояние сеанса по умолчанию отключено в MVC и обычно не рекомендуется, если это абсолютно необходимо.

+0

Извините, что это неправда. Состояние сеанса уже включено по умолчанию. Дело в том, что я менял файл web.config программно, а затем сразу назначал сеанс, из-за которого пул приложений был перезапущен и сеанс был очищен. –

1

Переменные сеанса очень подвержены действию null, то есть каждый раз, когда новый сеанс создается пользователем, браузером, сетью или приложением. Вот почему очень рекомендуется обернуть его, если ... else block.

if(Session["key"] != null) { 
    // Variable exists for the session 
    // use variable 
} else { 
    // Variable doesn't exist in the session 
    // create and user variable 
} 

Однако, если вы все еще всегда получить null, то вы должны проверить, что происходит неправильно. Моя ставка заключается в том, что есть другой код или процесс, который завершает предыдущие сеансы и перезапускает их. Вы должны знать, что можете программно также удалить все сеансы, что также может вызвать эту проблему.

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

+0

Спасибо afzaal, вы пишете, что мое приложение перезапускалось из-за изменения файла веб-конфигурации, из-за которого сеанс был очищен. Большое спасибо. –

+0

@ManpritSingh Да, есть много способов, с помощью которых вы можете обновить сеанс, который очищает эти переменные и сбрасывает их до «null». –

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