С# Не удается проверить сеанс?
Я получаю сообщение об ошибке, когда я делаю следующее:
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"];
}
}
}
Ответы
Ответ 1
Сессия действительно существует только во время обработки действия - я бы не ожидал, что она будет действительной в конструкторе контроллера. Например, контроллер может (для всех, кого я знаю) повторно использовать между запросами.
Вам нужно будет сделать это либо в действии (методе), либо (возможно, более подходящим образом) в фильтре действий или методе 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
[] является индектером, он действует как метод класса.
В этом случае Session имеет значение null, и вы не можете выполнить индексацию на нем.
Сделайте это:
if(Session != null && Session["value"] != null)
{
// code
}
Ответ 3
Вам нужно будет сделать это вот так:
if(null != HttpContext.Current.Session["Value"])
{
//Code here.
}
Ответ 4
Вы получаете эту ошибку, потому что объект "Сессия" имеет значение null. Поэтому невозможно просмотреть бит [ "value" ]. Я не знаком с MVC, но есть ли еще большая проблема, при которой объект Session не создается, или вы обращаетесь к нему в неправильной точке жизненного цикла, или вам просто нужен тест, чтобы проверить, является ли Session!= нуль.
Ответ 5
Используемый вами синтаксис:
if (Session["mySessionVariable"] != null)
{
}
... это правильный способ проверки объекта Session в ASP.NET. Я подозреваю, что проблема в том, что вы используете ASP.NET MVC.
Возможно, некоторые из наших экспертов MVC могут просветить нас относительно правильного способа сделать это в ASP.NET MVC.
Изменить: Я вижу, что Марк Гравелл опубликовал свой ответ, пока я набираю это. Это должно быть иллюстративным.
Ответ 6
Я решаю таким образом:
if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{
}
Ответ 7
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
//fire code
}
Ответ 8
Вы также можете использовать:
if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
// Do something
}