[英]Handle Session in ClassLibrary C#
我正在创建类库项目来跟踪会话值。
我不知道如何实现这一点,请指导我。
在 global.asax 文件中
session_Start() //event
{
obj.Start(string val1,string val2);
}
和
session_end()
{
obj.End();
}
在班级图书馆项目中
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;
}
}
谢谢。
您似乎对Session
和ApplicationState
感到困惑。
在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():
}
}
}
你的全局 asax 将变成:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.