Обращение к сессии из класса, не являющимся Page
От: sheich  
Дата: 23.09.08 08:18
Оценка:
Имеется .aspx страница, при загрузке которой в её методе Page_Load происходит присваивание значений некоторым переменным объекта Сессия:
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["login"] = "value";
    }

Далее, мне нужно из некоторого другого класса, который описывается в отдельном файле узнать содержимое этой переменной сессии.
такой:
    string s = (string)Session["login"];

и такой:
    string s = (string)System.Web.HttpContext.Session["login"];

способы приводят к ошибке NullReferenceException
при этом ссылка на модуль System.Web в заголовках присутствует.

Попытался сделать следующее:
В коде серверной части моей .aspx страницы (CodeFile который) создаю еще один класс (в добавок к тому, который включает метод Page_Load и который указан в "Inherits" клиентской части страницы):
    public class Test
    {
        public string SessionLogin()
        {
            return (string)HttpContext.Current.Session["login"];
        }

    }

Теперь, по идее, при создании объекта класс Test я могу обратиться к его свойству SessionLogin и узнать, таким образом, текущее значение сессии "login". Так вот, в чем загвоздка: если я пишу:
    string s = new Test().SessionLogin();

в теле главного класса самой страницы — это срабатывает, значение переменной сессии я вижу.
Когда же я перехожу на страницу, не являющуюся веб-формой и которая взаимодействует с веб-сервером (а тот, в свою очередь с БД) через AJAX -> WCF сервис и в момент вот этого обращения страницы через AJAX в классе, выполняющим соединение с БД пытаюсь вызвать тот же самый метод класса Test — опять получаю исключение NullReferenceException (в строке HttpContext.Current.Session["login"]). Хотя вот эта переменная сессии точно уже существует на тот момент, потому что я это проверил на предыдущей странице.

Вопрос: как сделать так, что бы сессия была видна за пределами Page?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.