zoukankan      html  css  js  c++  java
  • 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,有时是要类型转换的。

  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/3114895.html
Copyright © 2011-2022 走看看