在c#中访问上下文会话变量

时间:2013-03-21 05:57:23

标签: c# session ihttphandler ihttpmodule

我有一个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();

它很好地执行并从会话中检索了值。

2 个答案:

答案 0 :(得分:1)

为什么需要直接使用Context而不是Session?从代码中我只能假设你要在Session中设置一个值,然后在页面加载时读取值。你可以这样做,而不是你做那样的事情:

  1. 添加全局应用程序类,右键单击您的项目,添加> New Item,选择Global Application Class,然后在该文件中插入以下代码以初始化值

    protected void Session_Start(object sender, EventArgs e)
    {
        Session["myvariable"] = "Gowtham";
    }
    
  2. 在Page_Load上,您可以通过以下方式访问:

    if ( Session["myvariable"] != null ) {
        String token = Context.Session["myvariable"].ToString();
    }
    
  3. 希望这有帮助..

答案 1 :(得分:0)

在两个部分中使用System.Web.HttpContext.Current.Session["myvariable"]