在ASP.NET中对Session的一些了解
Session的工作原理:
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
何为session???
在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。存储在Session池中的数据是全局型的数据,可以跨页面访问,每个SessionID中只存储唯一的数据。Session池中的数据不能跨进程访问。
session的声明周期与销毁,session存储数据计时是滚动计时方式。具体是这样的,如果你打开写入session,从写入开始,此页面如果一直没有提交操作,则默认时间是20分钟,20分钟后session被服务器自动销毁,如过有提交操作,服务器会从提交后重新计时以此类推,直至设定时间内销毁。可以设置session的销毁时间。
我们知道Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的。session中保存的数据是在服务端的,而每个用户如进行登录操作,都要进行session数据写入,所以建议慎用session,就是少用。
下面是我写的一个例子,Session大致的意思如例子中的介绍:
这是一个前台页面,登陆界面(如下图),有用户名、密码以及登陆按钮。用户登陆需要将用户名传到主界面上,显示是该用户登陆,我用的Session。
上面是登陆界面,用户名是test,下图是主界面,图中的"test"正是用户名,从登陆界面传过来的值。
登陆界面后台代码(不全面,有删减!!):
/// <summary> /// 登陆到主界面 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSign_In_Click(object sender, EventArgs e) { string user = this.txtUsername.Text.Trim(); string pwd = this.txtPassword.Text.Trim(); if (user == "" || pwd == "") { Response.Write("<script>alert('用户名和密码不能为空,请输入用户名或密码!');</script>"); } else { int state = 0;//操作数据库结果 string sql = "";//SQL语句 try { //打开数据库 helper.Connect(); //查询用户信息记录 sql = "select Username,Password from UsersInfo where Username='" + user + "'and Password='" + pwd + "'"; // 执行查询命令 state = helper.DataTable_UsersInfo(sql); if (state > 0) { Session["Username"] = this.txtUsername.Text;//传值(用户名) Server.Transfer("Index.aspx"); } else { Response.Write("<script>alert('对不起,用户名或密码不正确,请您重新输入!');</script>"); this.txtUsername.Text = ""; return; } } catch (Exception E) { E.Message.ToString(); } finally { //关闭数据库 helper.Close_Up(); } } }
用户通过登陆界面登陆之后,在主界面上会显示是该用户的登陆,所以应该在主界面Page_Load()里面加载从登陆界面传过来的值。代码如下:
protected void Page_Load(object sender, EventArgs e) { if (Session["Username"].ToString() != null) { this.lblUsername.Text = Session["Username"].ToString(); Session.Timeout = 60; //Session.Remove("Username"); } }
总之,所说的不是很专业,就是自己练习的例子。非要说个所以然,什么具体的功能啊,存在哪些方面的问题啊、缺陷啊,也不会详尽。如果您需要这方面的知识,就尽量多在网上找找吧。。。