asp.net中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,就是少用。
asp.net中session的原理及应用的更多相关文章
- 判断asp.net中session过期的方法
判断asp.net中session过期的方法 转载自:http://www.cnblogs.com/xilipu31/archive/2013/04/12/3016830.html 方法一:最麻烦也是 ...
- ASP.NET中Session的sessionState 4种mode模式
1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. ...
- ASP.NET中Session的个人浅谈
看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...
- Flask中session实现原理
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- 几种判断asp.net中session过期方法的比较
方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: protected void Page_Load(object sender, EventArgs e) { if ...
- asp.net中Session过期设置方法
在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会 ...
- ASP.Net中Session失效的一种编程思路
在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的 ...
- asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”
1. 页面载入后,必须要等到page_Load方法执行建立 page对象后才可以使用Session 2. 在.aspx和.cs文件中使用Session的区别 (1).aspx: Session[&qu ...
- ASP.NET中session和ViewState区别
session变量是保存在Sever的内存中的,用的太多肯定会拖累Sever的,而且20分钟后session变量就会过期,不适合保存长期变量. ViewState是将数据保存在页面隐藏的控件中,永远不 ...
随机推荐
- BJOI2015 Day1
本以为会是三道小强与阿米巴,结果打开题目一看发现了这个: T1: 恩先写着一道 #include<cstdio> #include<cstring> #include<c ...
- javascript第一弹——对象
一. 什么是对象 对象是包含一组变量(称为属性)和函数(称为方法)的集合的实例. javascript中所有事物都是对象 javascript有很多内建对象 javascript允许自定义对象 对象只 ...
- Nhibernate Case SUM
SELECT ID END) as nbRowWithValueOf2, END) as nbRowWithValueOf3 FROM Foo GROUP BY ID queryover = quer ...
- Editplus从下载到使用
☆ 准备工作 1,保证浏览器正常上网 2,能下载软件或已经下载到Editplus这个工具. ☆ 下载editplus 在浏览器输入http://www.editplus.com,然后回车.进入edit ...
- POJ 1185 经典状压dp
做了很久的题 有注释 #include<stdio.h> #include<string.h> #include<algorithm> #include<ma ...
- HDR the Bungie Way PPT and demo from MSFT
Gamefest 2006 - HDR the Bungie Way Posted By: Falagard <falagard@hotmail.com> Date: 4/26/07 9: ...
- Klayge 引擎的安装
http://www.klayge.org/wiki/index.php?title=%E4%BE%8B%E5%AD%90%E7%A8%8B%E5%BA%8F&redirect=no& ...
- Ubuntu 14.04 安装 VirtualBox
参考: ubuntu14.04,安装VirtualBox 5.0(虚拟机软件)! 由于Vagrant工具的需要,安装了一下VirtualBox. 使用参考链接的法一居然在软件中心里面报错,我想可能是没 ...
- 那么都数据库表,那么多不同记录。是怎样都存储在一个key-value数据库的?
那么都数据库表,那么多不同记录.是怎样都存储在一个key-value数据库的? :设置不同的键值而已!不同的表,选出统一的key规范 jedis.sadd("tom:friend:list& ...
- ExtJS笔记3 MVC Architecture
MVC Architecture MVC架构 Contents File Structure Creating the application in app.js Defining a Contr ...