Проверить 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" />
ссылки: здесь