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,有时是要类型转换的。