C # Не удается проверить, существует ли сессия? - PullRequest
16 голосов
/ 17 апреля 2009

Я получаю сообщение об ошибке при выполнении следующих действий:

if(Session["value"] != null)
{
   // code
}

Я получаю следующую ошибку:

Ссылка на объект не установлена ​​для экземпляра объекта.

Почему это? Я всегда проверяю свою сессию таким образом? Я использую MVC Framework, это как-то связано с этим?

EDIT:

Код находится в конструкторе контроллера:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}

Ответы [ 8 ]

21 голосов
/ 17 апреля 2009

[] - это индексатор, он действует как метод в классе.

В этом случае Session имеет значение null, и вы не можете выполнить индексацию для него.

Сделайте это:

if(Session != null && Session["value"] != null)
{
   // code
}
18 голосов
/ 17 апреля 2009

Сессия действительно существует только во время обработки действия - я не ожидаю, что она будет действительной в конструкторе контроллера. Например, контроллер (насколько мне известно) может использоваться повторно между запросами.

Вам нужно будет сделать это либо в действии (методе), либо (возможно, более уместно) в фильтре действий, либо в методе (ах) OnActionExecuting (и т. Д.):

public abstract class ControllerBase : Controller
{
    protected override void OnActionExecuting(
        ActionExecutingContext filterContext)
    {
        // code involving this.Session // edited to simplify
        base.OnActionExecuting(filterContext); // re-added in edit
    }
}
2 голосов
/ 17 апреля 2009

Вы получаете эту ошибку, потому что объект "Session" является нулевым. Поэтому невозможно взглянуть на бит ["value"]. Я не знаком с MVC, но либо есть большая проблема, из-за которой объект Session не создается, либо вы обращаетесь к нему не в той точке жизненного цикла, или вам просто нужен тест, чтобы проверить, является ли Session! нуль.

2 голосов
/ 17 апреля 2009

Вы должны будете сделать это так -

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}
1 голос
/ 08 марта 2014
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}
1 голос
/ 20 марта 2011

Я решаю таким образом:

if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{

}
1 голос
/ 17 апреля 2009

Используемый вами синтаксис:

if (Session["mySessionVariable"] != null)
{

}

... - это правильный способ проверки объекта Session в ASP.NET. Я подозреваю, что проблема в том, что вы используете ASP.NET MVC.

Возможно, некоторые из наших экспертов по MVC могут рассказать нам, как правильно сделать это в ASP.NET MVC.

Редактировать: Я вижу, что Марк Гравелл опубликовал свой ответ, пока я печатаю это. Это должно быть осветительно.

0 голосов
/ 28 апреля 2017

Вы также можете использовать:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}
...