Имеется .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?