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

 

posted on 2013-06-03 10:39  天上星  阅读(276)  评论(0编辑  收藏  举报

导航