Проверить ASP.NET на сессии

Я хотел бы проверить наличие сеанса в базовом классе страницы, прежде чем использовать его, но я обнаружил, что если он не существует, он выдаст исключение, просто проверив:

if (Session != null)
{
    Session.Remove("foo");
}

выдаст это исключение:

состояние сеанса можно использовать, только если enableSessionState имеет значение true, либо в файл конфигурации или в директиве Page. Пожалуйста, также убедитесь, что Система.Сеть.Sessionstatemodule или пользовательский модуль состояния сеанса включено в раздел в конфигурации приложения.

проверка происходит в событии Load базового класса страниц, из которого происходят все мои страницы aspx. Приложение имеет сеанс включен, и он имеет модуль, указанный в узле httpModules. Это приложение, которое использует сеанс часто, как правило, без проблем.

Я получаю эту ошибку только на определенных страницах и большую часть времени он не надежный. Я знаю, что должен сделать что-то другое, чтобы предотвратить ошибка, но я не уверен, что?

возможно, я вызываю сеанс слишком рано в жизненном цикле? Я неправильно проверяю, доступен ли сеанс?

5 ответов


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

но он должен быть доступен в Page_Load (), так что указывает на проблемы в другом месте:)


вы можете использовать такой метод, чтобы определить, использует ли текущий запрос сеанс:

    public static bool RequestHasSession
    {
        get
        {
            return (HttpContext.Current.Handler is IRequiresSessionState);
        }
    }

Если вы не уверены, что вы даже работаете в веб-контексте, вам нужно будет проверить, что HttpContext.Ток не был нулевым заранее.


вы не испытываете исключение из-за того, что определенная переменная сеанса является нулевой, а просто с помощью логики сеанса на странице, которая не настроена для связи с сервером состояния сеанса (что имеет смысл в некоторых случаях, когда это на самом деле другая машина). Если это не проблема для вас, убедитесь, что у вас всегда есть enableSessionState значение true.


попробуйте проверить для HttpContext.Current.Session, или даже HttpContext.Current (Я делаю это много в модульном тестировании, когда компоненты вызываются из ASP.NET я получил эти vars, но когда я звоню им из НАНИТ у меня их нет в наличии)


вы проверили страницы, которые бросают ошибку для enableSessionState свойство директивы Page? Вы можете сделать это, перейдя на .страница aspx и проверка того,enableSessionState свойству установлено значение true / false. Если его установить в false, сделать это true.

также проверьте в интернете.config для тега <pages />, и обновить его, включив -

<pages enableSessionState="true" />

ссылки: здесь