有的隐私信息或不能让客户端随便改动的信息放在服务端即可,这时我们就用到session这人名词。
以下的例子是我们在客户端写个值保存于服务器上,服务器读取其值对显示在服务端:
为了实现上述的情况,我们建立一个类,让COOKIE传递一个id值给服务端,服务端再把得到的返回到客户端:
1。服务端的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;///
///SessionMgr 的摘要说明
///
public class SessionMgr
{private static IDictionary<string,IDictionary<string,object>> sessiondata &#61; new Dictionary<string,IDictionary<string,object>>();public static IDictionary<string,object> getsession(string sessionid){if (!sessiondata.ContainsKey(sessionid)){IDictionary<string,object> session&#61;new Dictionary<string,object>();sessiondata[sessionid]&#61;session;return session;}elsereturn 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来传递,写回去一个COOKIEif (Request.COOKIEs["mysessionID"] &#61;&#61; null){string id &#61; Guid.NewGuid().ToString();Response.SetCOOKIE(new HttpCOOKIE("mysessionID",id));}
}
///写入session
protected void Button1_Click(object sender, EventArgs e){string sessionid&#61;Request.COOKIEs["mysessionID"].Value;IDictionary<string, object> session &#61; SessionMgr.getsession(sessionid);session["服务器数据"] &#61; "ABCD";}
///读取session
protected void Button2_Click(object sender, EventArgs e){string sessionid &#61; Request.COOKIEs["mysessionID"].Value;IDictionary<string, object> session &#61; SessionMgr.getsession(sessionid);Button2.Text &#61; session["服务器数据"].ToString();}
}
以上就是Asp.net的session原理&#xff0c;会把用户的一些信息保存于服务端的内存中&#xff0c;为防止内存不停增大&#xff0c;它会给每个session加了个期限&#xff0c;因此session是有超时机制的&#xff0c;服务器并不清楚浏览器是否关闭. session并不是http协议规定的&#xff0c;是各种语言自己实现的功能&#xff0c;不同的浏览器访问同个网站会产生不同的session 和COOKIE,是不能跨域操作的。
在asp.net中session的用法非常简单&#xff0c;以下为自增的例子&#xff0c;我们在页面上放一个textbox 和button,每点击一次button就会给textbox的值增一
如下为原代码&#xff0c;值是放在服务端的&#xff0c;用户是无法修改值的&#xff0c;你也可以修改一下客户端试下&#xff1a;
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"] &#61; 0;TextBox1.Text &#61; "0";}}protected void Button1_Click(object sender, EventArgs e){int v &#61;Convert.ToInt32(Session["value"]);v&#43;&#43;;Session["value"] &#61; v;TextBox1.Text &#61; v.ToString();}
}
session的值是object,有时是要类型转换的。