模拟Session原理

  Session是保存在服务器端的,关于用户个人信息的一个小容器!用来保存每一个用户的关键信息!每个用户访问时候,都会创建一个SessionID,这个SessionID会保存到浏览器的cookie中。服务器根据SessionID关联到此浏览器的用户。

  那么我先建一个SessionManager类,用来管理Session。:

管理Session的类
public class SessinManager
{
//模拟asp.net的session原理!
private static IDictionary<string, IDictionary<string, object>> data = new Dictionary<string, IDictionary<string, object>>();
public static IDictionary<string, object> GetSession(string sessionID)
{
if (data.ContainsKey(sessionID)) //此id是与浏览器密切相关的,基本上一个浏览器就一个SessionID
{ //一般保存在浏览器的cookie中。
return data[sessionID];
}
else
{
IDictionary
<string, object> session = new Dictionary<string, object>();
data[sessionID]
= session; //以传过来的SessionID创建一个Dictionary。
return session;
}
}
}

然后在用户访问的时候产生SessionID,创建Session空间。

设置,读取Session
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["MySessionID"] == null) //在网站主页(入口)设置SessionID。
{
string sessionID = Guid.NewGuid().ToString(); //随机产生一个ID,并保存到cookie中。
Response.SetCookie(new HttpCookie("MySessionID",sessionID));
}
}
protected void SetSession_Click(object sender, EventArgs e)
{
string sessionID=Request.Cookies["MySessionID"].Value; //从cookie中读取SessionID
IDictionary<string, object> session = SessinManager.GetSession(sessionID);
//根据cookie中保存的SessionID访问服务端的开辟的内存空间。
session["UserMessage"] = "小小鸟";//设置Session中的值
}
protected void GetSession_Click(object sender, EventArgs e)
{
string sessionID=Request.Cookies["MySessionID"].Value;
IDictionary
<string, object> session = SessinManager.GetSession(sessionID);
Button2.Text
=session["UserMessage"].ToString();//读取Session中的值
}
欢迎各位高手指点。谢谢!!
作者:GY小小鸟
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/YangFengHui/p/2032907.html