zoukankan      html  css  js  c++  java
  • 模拟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小小鸟
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    IntelliJ IDEA 使用svn教程
    尾递归
    斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
    斐波拉契数列的计算方法
    C#实现多线程的方式:Task——任务
    LINQ查询表达式详解(2)——查询表达式的转换
    LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
    完成异步委托的三种方式
    C#实现多线程的方式:使用Parallel类
    C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
  • 原文地址:https://www.cnblogs.com/YangFengHui/p/2032907.html
Copyright © 2011-2022 走看看