asp.net中session的原理及应用详解
程序员文章站
2024-03-06 14:29:26
session简介丶特性 -------------------------------------------------------------------------...
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,就是少用。
--------------------------------------------------------------------------------
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,就是少用。
上一篇: 解决Android Studio导入项目非常慢的办法
下一篇: java生成excel报表文件示例
推荐阅读
-
asp.net中session的原理及应用详解
-
asp.net中session的原理及应用详解
-
ASP.NET中的Menu控件的应用及XmlDataSource的了解
-
ASP.NET中的Menu控件的应用及XmlDataSource的了解
-
详解Android应用中屏幕尺寸的获取及dp和px值的转换
-
详解Android应用开发中Intent的作用及使用方法
-
详解Android应用中屏幕尺寸的获取及dp和px值的转换
-
浅谈Java中的atomic包实现原理及应用
-
详解Android应用开发中Intent的作用及使用方法
-
详解PHP中cookie和session的区别及cookie和session用法小结