2009-07-14 1 views
8

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

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

Выбросите это исключение:

состояние сеанса можно использовать только тогда, когда EnableSessionState установлена ​​истина, либо в файле конфигурации в или в директиве Page. Также убедитесь, что System.Web.SessionStateModule или пользовательский модуль состояния сеанса включен в раздел \\ в конфигурации приложения.

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

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

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

ответ

3

Вы можете сделать чек безопаснее - Page.Session обертывания нуль проверьте свойство Context.Session. Таким образом, вы должны иметь возможность получить Context.Session и проверить, является ли оно нулевым. Если это то, состояние сеанса недоступно.

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

0

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

0

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

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

<pages enableSessionState="true" /> 

Ссылка: Here

+0

enableSessionState должно быть свойством класса страниц? Я вижу только свойство enableViewState. –

0

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

9

Вы можете использовать метод, как это определить, если текущий запрос использует сессию:

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

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

+0

'IReadOnlySessionState' наследует' IRequiresSessionState', поэтому вам нужно только проверить, что для HttpContext.Current.Handler является IRequiresSessionState'. –

+1

Хорошее наблюдение - я исправил код. –

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

  • Нет связанных вопросов^_^