Доступ к переменным сеанса контекста в С#

У меня есть приложение ASP.NET и dll, которое расширяет IHttpModule. Я использовал метод ниже, чтобы сохранить переменные сеанса в httpcontext через

public class Handler : IHttpModule,IRequiresSessionState
  {

 public void Init(HttpApplication httpApp)
 {
    httpApp.PreRequestHandlerExecute += new EventHandler(PreRequestHandlerExecute);
}

 public void PreRequestHandlerExecute(object sender, EventArgs e)
        {
                var context = ((HttpApplication)sender).Context;
                context.Session["myvariable"] = "Gowtham";
        }
}

и на моей странице asp.net Default.aspx я использовал код для извлечения значения как

   public partial class _Default : System.Web.UI.Page, IRequiresSessionState
    {
    protected void Page_Load(object sender, EventArgs e)
        {
      String token = Context.Session["myvariable"].ToString();
    }
}

Я получаю ответ об ошибке как

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Чтобы убедиться, что переменные хранятся в сеансе, я перепроверил следующий метод в обработчике класса после сохранения значения в сеансе как

  string ss = context.Session["myvariable"].ToString();

он хорошо выполнен и получил значение из сеанса.


person GowthamanSS    schedule 21.03.2013    source источник
comment
Возможный дубликат Доступ к данным сеанса из другого потока   -  person Sr Julien    schedule 06.10.2016


Ответы (2)


Почему вам нужно использовать контекст, а не сеанс напрямую? Из кода я могу только предположить, что вы собираетесь установить значение в сеансе, а затем прочитать значение при загрузке страницы. Вместо того, чтобы делать что-то подобное, вы можете сделать это:

  1. Добавьте глобальный класс приложения, щелкните правой кнопкой мыши свой проект, выберите «Добавить»> «Новый элемент», выберите «Глобальный класс приложения» и вставьте в этот файл следующий код для инициализации значения.

    protected void Session_Start(object sender, EventArgs e)
    {
        Session["myvariable"] = "Gowtham";
    }
    
  2. На Page_Load вы можете получить доступ:

    if ( Session["myvariable"] != null ) {
        String token = Context.Session["myvariable"].ToString();
    }
    

Надеюсь, это поможет..

person Ruly    schedule 21.03.2013
comment
можно обойтись без использования Global Application Class - person GowthamanSS; 21.03.2013

используйте System.Web.HttpContext.Current.Session["myvariable"] в обеих частях

person Dima    schedule 21.03.2013