在ClassLibrary c#中处理会话

本文关键字:处理 会话 ClassLibrary | 更新日期: 2023-09-27 18:16:37

我正在创建classlibrary项目来跟踪会话值。

我不知道如何做到这一点,请指导我。

在全球。ax文件

session_Start() //event
{
  obj.Start(string val1,string val2);
 }

session_end()
{
   obj.End();
}

在classlibrary项目

Class Class_Name
{
     public void Start(string val1,string val2)
      {
          guid=Guid.NewGuid(); //for unique id for each session,
          hastable and its values;
           session[guid]=hastable_values;
       }
   public void End()
      {
       hastable t=(hastable)  session[guid]; //here is the problem,its null.
       send the hastable data to database;
      }
  }

谢谢。

在ClassLibrary c#中处理会话

你似乎被SessionApplicationState搞混了。

Session_Start运行的那一刻,你得到一个新的容器为特定的浏览器(由于会话cookie正在生成)。在随后的每次调用中,都会返回相同的会话容器,其中包含为此会话存储的对象。当调用Session_End时,该容器将被移除。

我不确定obj是实例变量还是静态变量,在这两种情况下,您的代码将表现不同。我的建议是在会话中使用固定的密钥保留一个类型为Class_Name的实例。这使得您可以始终检索该实例,并且asp.net框架处理为每个请求加载正确的唯一会话容器。

Session_Start() //event
{
     var cn = new Class_Name();
     cn.Start(string val1,string val2);
     Session["class_name"] = cn;
}
Session_end()
{
    var cn = Session["class_name"] as Class_Name;
    if (cn !=null) 
    {
         cn.End();
    }
}

在你的类库项目和类型中,你可以存储任何你想要的东西,只要你确保类型是可序列化的(如果你的实例需要在状态服务器中序列化)

Class Class_Name
{
     Guid guid;
     HashTable hashtable_values;
     public void Start(string val1,string val2)
     {
          guid=Guid.NewGuid(); //for unique id for each session,
          //hastable and its values;
          // those are now already stored in the session 
     }
     public void End()
     {
        // send the hastable data to database;
        // hash_table has all the values still stored, process them at will
        // do realize that Session_End is not guaranteed to be called
        // so if you still want to store critical stuff in this phase
        // you might be missing data for some sessions    
     }
  }

你可以在你的类中添加类似静态工厂的方法和Instance属性:

class Class_Name
{
    public static void StartSession(string val1, string val2)
    {
        var cn = new Class_Name();
        cn.Start(val1, val2);
        HttpContext.Current.Session["class_name"] = cn;
    }
    // all your classes that need access to theis session object will need 
    // to call this Instance property
    public static Class_Name Instance 
    {
       get 
       {
          return HttpContext.Current.Session["class_name"] as Class_Name;
       }
    }
    public static void EndSession()
    {
        var cn = Instance;
        if (cn != null) 
        {
             cn.End():
        }
    }      
}

和你的全局轴将变成:

Session_Start() //event
{
     Class_Name.StartSession(string val1,string val2);
}
Session_end()
{
    Class_Name.EndSession();
}

msdn.

应用程序和页面生命周期概述

如果您想访问使用HttpContext.Current.Session类的会话,请查看此链接以获取更多信息

Class Class_Name
{
     public void Start(string val1,string val2)
      {
          guid; //for unique id for each session,
          hastable and its values;
           HttpContext.Current.Session[guid]=hastable_values;
       }
   public void End()
      {
       hastable t=(hastable)  HttpContext.Current.Session[guid]; //here is the problem,its null.
       send the hastable data to database;
      }
  }