• 7 Session原理


    有的隐私信息或不能让客户端随便改动的信息放在服务端即可,这时我们就用到session这人名词。

    以下的例子是我们在客户端写个值保存于服务器上,服务器读取其值对显示在服务端:

    为了实现上述的情况,我们建立一个类,让cookie传递一个id值给服务端,服务端再把得到的返回到客户端:

    1。服务端的类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    ///SessionMgr 的摘要说明
    /// </summary>
    public class SessionMgr
    {
        private static IDictionary<string,IDictionary<string,object>> sessiondata = new Dictionary<string,IDictionary<string,object>>();
        public static IDictionary<string,object> getsession(string sessionid)
        {
            if (!sessiondata.ContainsKey(sessionid))
            {
                IDictionary<string,object> session=new Dictionary<string,object>();
                sessiondata[sessionid]=session;
                return session;
            }else
                return sessiondata[sessionid];
    
    
        }
    }

    2.建立服务端处理页面。先在上面放置两个button,一个为写入session,另个为读取session并把得到的值显示于按钮上

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class session变量 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //用cookie来传递,写回去一个cookie
            if (Request.Cookies["mysessionID"] == null)
            {
                string id = Guid.NewGuid().ToString();
                Response.SetCookie(new HttpCookie("mysessionID",id));
            }
    
    } ///写入session
    protected void Button1_Click(object sender, EventArgs e) { string sessionid=Request.Cookies["mysessionID"].Value; IDictionary<string, object> session = SessionMgr.getsession(sessionid); session["服务器数据"] = "ABCD"; } ///读取session
    protected void Button2_Click(object sender, EventArgs e) { string sessionid = Request.Cookies["mysessionID"].Value; IDictionary<string, object> session = SessionMgr.getsession(sessionid); Button2.Text = session["服务器数据"].ToString(); } }

    以上就是Asp.net的session原理,会把用户的一些信息保存于服务端的内存中,为防止内存不停增大,它会给每个session加了个期限,因此session是有超时机制的,服务器并不清楚浏览器是否关闭. session并不是http协议规定的,是各种语言自己实现的功能,不同的浏览器访问同个网站会产生不同的session 和cookie,是不能跨域操作的。

    在asp.net中session的用法非常简单,以下为自增的例子,我们在页面上放一个textbox 和button,每点击一次button就会给textbox的值增一

    如下为原代码,值是放在服务端的,用户是无法修改值的,你也可以修改一下客户端试下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class incSession : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["value"] = 0;
                TextBox1.Text = "0";
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            int v =Convert.ToInt32(Session["value"]);
            v++;
            Session["value"] = v;
            TextBox1.Text = v.ToString();
        }
    }

    session的值是object,有时是要类型转换的。

  • 相关阅读:
    centos go语言 开启代理 国内镜像
    Docker给MongoDB设置用户密码
    ubuntu镜像一般apt-get源地址都是在国外导致在构建时因为源地址问题导致下载速度极其得慢
    在centos7安装nodejs并升级nodejs到最新版本
    使用express创建简单web服务器
    关于docker的mongo镜像的部署
    Python:函数定义
    Python:if-while-for
    Python:运算符
    Python:标准数据类型6种
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/3114895.html
Copyright © 2020-2023  润新知