Session的原理解释

创建一个项目Session,在项目下面添加一个类 SessionMgr 添加一个WebForm1.aspx

SessionMgr 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Sesson
{
    public class SessonMgr
    {
       //其实 Session就是内存中的Dictionary,只不过它是一个特殊的Dictionary,它的value值也是一个Dictionary ,它是用来存session数据的:
       private static   Dictionary<string, Dictionary<string, object>> data = new Dictionary<string, Dictionary<string, object>>();

       //这个sesseionID就是用来做session的key的,方法的放回值就是session的value,这个value是一个dictionary<string,object>
        public static Dictionary<string, object> GetSession(string sesseionID)
        {
            if (data.ContainsKey(sesseionID)) //查询data中是否包含用户传递过来key为sessionID的session
            {
                return data[sesseionID]; //如果包含在data里面,那么就将它的值返回回去,它的值(data[sesseionID])其实就是一个Dictionary<string, object>;  【这个data[sessionID]就是Dictionary<string, Dictionary<string, object>>中的Dictionary<string, object>】
            }
            else
            {
                Dictionary<string, object> session = new Dictionary<string, object>();
                //data[sesseionID] = session;  另外一种写法

                data.Add(sesseionID, session);//将用户传过来的sessionID作为key,将自己创建的一个Dictionary<string,object>对象session作为值 添加到data中。
                return session;
            }
        }

    }
}

WebForm1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Sesson.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <p>
           <%-- 设置session--%>
            <asp:Button ID="Button1" runat="server" Text="设置session" OnClick="Button1_Click" />

            <%--获取session--%>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:Button ID="Button2" runat="server" Text="获取session" OnClick="Button2_Click" />

           <%-- 这个button用来弹出目目前浏览器里有哪些Cookie,他们的值是什么。--%>
            <input type="button" value="Test" onclick="alert(document.cookie);" />

        </p>
    </div>
    </form>
</body>
</html>

WebForm1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Sesson
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

                //首先检查一下我的Cookies里面有没有一条叫做MySession的Cookie,如果没有,就将设置一个
                if (Request.Cookies["MySession"] == null)
                {
                    string sessionID = Guid.NewGuid().ToString();
                    //设置Cookie
                    Response.SetCookie(new HttpCookie("MySession", sessionID));//设置一个名字为:MySession的Cookie,它的值设定为sessionID

                    /*
                    HttpCookie mycookie = new HttpCookie("abc"); //设置一个名字叫"abc"的cookie ,它的值是下面三个dictionary<string,string>
                    mycookie.Values.Add("a", "111");
                    mycookie.Values.Add("b", "222");
                    Response.SetCookie(mycookie);
                    */
                }
            }

        //设置Session
        protected void Button1_Click(object sender, EventArgs e)
        {
            //首先,我先在Cookies里取一下名字为MySession的Cookie。这个Cookie其实就是Sesson的一个key。取得这个Sesson的key之后,我就调用SessonMgr.GetSession(sessionID)这个方法。
            string sessionID = Request.Cookies["MySession"].Value;

            //SessonMgr.GetSession(sessionID);这个方法就是创建一个key为MySession,值为Dictionary<string,object>的 Dictionary;然后给它的值返回回来。
            Dictionary<string,object> session= SessonMgr.GetSession(sessionID);
            session["Name"] = "张三"; //或者这样写: session.Add("Name", "张三");

            session["Age"] = "26";    //或者这样写: session.Add("Age", "26");
            session["Gender"] = "男"; //或者这样写: session.Add("Gender", "男");

        }

        //获取Session
        protected void Button2_Click(object sender, EventArgs e)
        {
            string sessionID = Request.Cookies["MySession"].Value;
            Dictionary<string,object> session= SessonMgr.GetSession(sessionID);
            TextBox2.Text = session["Name"].ToString() + session["Age"].ToString() + session["Gender"].ToString();
        }
    }
}



Session的原理解释

时间: 2024-12-30 19:39:48

Session的原理解释的相关文章

UDP 打洞 原理解释

终于找到了一份满意的UDP打洞原理解释,附上正文,自己整理了一下源码 3.3. UDP hole punching UDP打洞技术 The third technique, and the one of primary interest in this document, is widely known as "UDP Hole Punching." UDP hole punching relies on the properties of common firewalls and c

asp.net中session的原理及应用

Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Seesion是独立存储的. 4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的. 5.Session不能跨进程访问,只能由该会话的用户访问.应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的. 6.当会话终止,或过期时,服

Objective-C中,ARC下的 strong和weak指针原理解释

Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是"本地变量" 一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 注意:ARC 是编译器特性,而不是 iOS 运行时特性(除

svm原理解释及推理

 1 初次理解SVM,咱们必须先弄清楚一个概念:线性分类器. 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类.如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置): 可能有读者对类别取1或-1有疑问,事实上,这个1或-1的分类标准起源于logistic回归. Logistic回归目的是从特征学习

[分享]Host文件的原理解释及应用说明

Host文件的原理解释及应用说明 Host文件位置及打开方式: Window系统中有个Hosts文件(没有后缀名), Windows 98系统下该文件在Windows目录,在Windows 2000/XP/Vista系统中位于C:\windows\system32\drivers\etc\ 目录中.该文件其实是一个纯文本的文件,用普通的文本编辑软件如记事本等都能打开. 工作原理: 我们知道在网络上访问网站,要首先通过DNS服务器把网络域名(www.XXXX.com)解析成61.XXX.XXX.X

cookie、Session工作原理

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择.二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览

php session实现原理

SESSION的实现中采用COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE: 在服务器端保存其他session变量,比如session_name等等.当用户请求服务器时也把session_id一起发送到服务器,通过 session_id提取所保存在服务器端的变量,就能识别用户是谁了.同时也不难理解为什么SESSION有时会失效了. 当客户 端禁用COOKIE时(点击IE中的"工具"?"Internet选项"

atitit.session的原理以及设计 java php实现的异同

atitit.session的原理以及设计 java php实现的异同 1. session的保存:java在内存中,php脚本因为不能常驻内存,所以在文件中 1 2. php的session机制 1 2.1. 解决Undefined variable: _SESSION的方法 1 2.2. Notice: A session had already been starte解决办法 2 3. 参考 3 1. session的保存:java在内存中,php脚本因为不能常驻内存,所以在文件中 2.在

VLAN原理解释

目录 -------------------------------------------------------------------------------- 1.为什么需要VLAN 2.实现VLAN的机制 3.VLAN的访问链接(Access Link) 4.VLAN的汇聚链接(Trunk Link) 5.VLAN的汇聚方式--IEEE802.1Q与ISL 6.VLAN间路由 7.三层交换机 8.加速VLAN间通信的手段 9.传统型路由器存在的意义 10.使用VLAN设计局域网 ---