视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
asp.net中session的原理及应用详解
2020-11-27 22:42:17 责编:小采
文档


Session简介丶特性
--------------------------------------------------------------------------------
1.Session是一种Web会话中的常用状态之一。
2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象。
3.每个客户端的Seesion是存储的。
4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的。
5.Session不能跨进程访问,只能由该会话的用户访问。应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的。
6.当会话终止,或过期时,服务器就清除Session对象。
7.Session常用于保存登录用户的ID.
8.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原理(根据上面例子阐述)
--------------------------------------------------------------------------------
一、session是怎么存储,提取的?
1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端,而这个SessionID是一cookie的方式保存的在客户端的内存中的,如果想要得到Session池中的数据,服务器就会根据客户端提交的唯一SessionID标识给出相应的数据返回。
2.输入正确的账号密码,点击登录,页面就会
输出 “admin --- 点击登录”
二、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,就是少用。

下载本文
显示全文
专题