Session简介丶特性javascript
1.Session是一种Web会话中的经常使用状态之一。java
2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象。jquery
3.每一个客户端的Seesion是独立存储的。web
4.在整个会话过程当中,只要SessionID的cookie不丢失,都会保存Session信息的。浏览器
5.Session不能跨进程访问,只能由该会话的用户访问。应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的。缓存
6.当会话终止,或过时时,服务器就清除Session对象。服务器
7.Session经常使用于保存登陆用户的ID.cookie
8.Session保存的数据是跨页面全局型的。session
Session的使用函数
这里我写入一个例子,便于下面阐述。
<head runat="server"> <title></title> <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script type="text/javascript"> function getSessionClick(action) { //这个函数是为了知道哪个提交按钮被点击 $("#hidlgc").val(""); //清空隐藏值 $("#hidlgc").val(action); //给隐藏控件赋值 } </script></head><body> <form id="form1" method="post" action="MySession.aspx"> <table> <tr> <td>帐号:</td><td><input type="text" name="txtUid" /></td>` </tr> <tr> <td>密码:</td><td><input type="password" name="txtPwd" /></td> </tr> <tr> <td colspan="2"> <input type="hidden" value="" id="hidlgc" name="hidlgclick" /> <input onclick="getSessionClick('lgclick')" type="submit" value="登陆" /> <input type="submit" onclick="getSessionClick('getSession')" value="获取session" /> <input type="submit" onclick="getSessionClick('backLg')" value="退出登陆" /> </td> </tr> </table> </form></body>
protected void Page_Load(object sender, EventArgs e) { //把用户id写入session中 if (Request.Form["hidlgclick"] == "lgclick") { if(Request.Form["txtUid"].ToString()=="admin"&&Request.Form["txtUid"].ToString()=="admin") //判断用户登陆 { Session["userName"] = Request.Form["txtUid"].ToString(); //把用户id保存到session中 Response.Write(Session["userName"].ToString()+"---点击登陆"); //获取session,并写入页面 } } //获取Session if (Request.Form["hidlgclick"] == "getSession") { if (Session["userName"] != null) { Response.Write(Session["userName"].ToString() + "---点击获取session"); //获取session,并写入页面 } } //取消当前会话,至关于注销(退出登陆)。 if (Request.Form["hidlgclick"] == "backLg") { Session.Abandon(); } }
<system.web> <sessionState timeout="40"></sessionState> <!---设置session的过时时间,时间以分钟为单位-->
Session原理(根据上面例子阐述)
1、session是怎么存储,提取的?
1.在服务器端有一个session池,用来存储每一个用户提交session中的数据,Session对于每个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器创建链接的时候,服务器会给用户分发一个SessionID做为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,若是想要获得Session池中的数据,服务器就会根据客户端提交的惟一SessionID标识给出相应的数据返回。
2.输入正确的帐号密码,点击登陆,页面就会输出 “admin --- 点击登陆”
2、Session池中每一个客户端的数据是怎么存储的?
1.存储在Session池中的数据是全局型的数据,能够跨页面访问,每一个SessionID中只存储惟一的数据,如:首先你这样设定:session["userName"]="admin",而后你在会话还没结束的session还没过时的状况下,你又设定:session["userName"]="123";这样这个SessionID没变,然而Session池中的数据则被覆盖。此时session["userName"]的值就是“123”,而不是其它。
2.Session池中的数据不能跨进程访问。如:打开login.aspx页面写入session[“userName”]="admin";而后login页面不关闭,即此会话不结束,在这是你再在另一个浏览器中打开一个login.aspx页面则session["userName"]=null
3.输入帐号密码,点击登陆页面输出 “admin --- 点击登陆” ,若是紧接着点击获取session按钮,则页面只输出"admin--- 点击获取session",若是页面不关闭,打开另一个浏览器,点击获取session按钮,则页面无法应。
三丶session的声明周期与销毁
1.session存储数据计时是滚动计时方式。具体是这样的,若是你打开写入session,从写入开始,此页面若是一直没有提交操做,则默认时间是20分钟,20分钟后session被服务器自动销毁,如过有提交操做,服务器会从提交后从新计时以此类推,直至设定时间内销毁。
2.能够设置session的销毁时间。上面代码有提到。
四丶session中保存的数据是在服务端的,而每一个用户如进行登陆操做,都要进行session数据写入,因此建议慎用session,就是少用。