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

本文关键字:会话 变量 上下文 访问 | 更新日期: 2023-09-27 18:04:55

我有一个ASP。. NET应用程序和扩展IHttpModule的dll。我使用以下方法通过

将会话变量保存在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默认。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();

它执行得很好,并从会话中检索值

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

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

  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();
    }
    

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