aps.net session全面介绍(生命周期,超时时间)
Asp.Net中的Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的。
在传统web编程语言(比如asp)中,session的过期完全是按照TimeOut来老老实实处理的,超时值默认是20分钟,但问题是:通常有很多用户只看一眼网页,然后就关浏览器走人了,这种情况下,服务端内存里还长久保存着Session的数据,如果这种用户很多,对服务器资源无疑是一种浪费。默认情况下,系统采用的是InProc模式,即进程内模式。这种情况下,Session是保存在Asp.Net工作进程映射的内存中的,问题是Asp.Net工作进程为了维护良好的平均性能,会被系统经常回收。我们在IIS里可以配置自动回收(比如按时间周期回收,或者当内存使用达到多少值时自动回收)。 当Asp.Net工作进程被回收时,其映射的内存全部被清空并初始化,以便其它程序可以使用,所以Session也跟着一并消失了,就这是为什么Sesssion会无故消失的主要原因。
一、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,就是少用。
五丶代码举例:
html:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<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> |
asp.net后台处理代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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(); } } |
设置session的过期时间
|
1
2
|
<system.web> <sessionState timeout="40"></sessionState> <!---设置session的过期时间,时间以分钟为单位--> |
aps.net session全面介绍(生命周期,超时时间)的更多相关文章
- session简介与生命周期
session简介 在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间. 具体到 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 配置Session变量的生命周期
在Web.config文件中配置Session变量的生命周期是在<sessionState></sessionState>节中完成的,在配置Session的生命周期时,可以设置 ...
- 如何在web.config文件中配置Session变量的生命周期
实例说明:在网上购物商城中,为了维护在线购物环境,一般只有注册会员才可以购买商品.实现购物功能时,先通过Session变量记录会员的登录名,然后在购买商品页面通过判断会员是否登录确定其能否购买商品. ...
- cookie生命周期expires 时间过期,但是cookie没有被浏览器清理的问题
cookie生命周期expires 时间过期,但是cookie没有被浏览器清理的问题 今天用nodejs起了一个web服务,使用art-template模板引擎渲染出来的页面,在这里我设置了一个coo ...
- JavaEE(9) - Session EJB的生命周期、事务及拦截器
1. SessionBean的生命周期 无状态Session Bean: 不存在状态-->待命状态-->被销毁状态 不存在状态-->待命状态: 1)通过构造器创建EJB实例 2)执行 ...
- Session原理、生命周期及购物车功能的实现
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据(保存该浏览器(会话)的相关信息)时 ...
- pageContext,request,session,application生命周期
equest是封装client端(也就是用户通过browser)提交的请求数据和属性的对象. response是封装web server端响应数据和属性的对象. 我们经常会将pageContext.r ...
- Session对象的生命周期(面试题/笔试题)
创建:第一次执行request.getSession()时创建 销毁: 1)服务器(非正常)关闭时 2)session过期/失效(默认30分钟) 问题:时间的起算点 从何时开始计算30分钟? 从不操作 ...
随机推荐
- python相关的报错处理
1.python3.6编译安装完毕后,使用pip3安装virtualenv,提示找不到ssl模块 原因:因为我们少装了openssl-devel依赖包,所以导致编译后的pip3无法找到ssl模块. 解 ...
- 14.wamp自定义网站根目录
1.首先打开Apache 中的配置文件httpd.conf crtl+f 搜索 documentroot ,在找到的目录中将目录修改自己的网站的目录,注意\ 与/ 2.在向下移动,找到<Di ...
- spring 实现定时任务
spring实现定时任务超级简单.比使用quartz简单,比使用timer强大.如下是一个简单的springboot任务,启用了定时任务 @SpringBootApplication@Componen ...
- python线程池/进程池创建
进程池 import time from concurrent.futures import ProcessPoolExecutor def task(arg): time.sleep(2) prin ...
- unity3d相关资源
http://pan.baidu.com/s/1kTG9DVD GUI源码
- HTML中的SEO和HTML语义化
SEO 1) <title>网站SEO标题</title>, 百度搜索出来的记录, 其标题基本就提取至网站的title, 标签, 因此标题起的好, 不论对点击率还是SEO都至关 ...
- Linux入门-教学视频学习笔记
视频地址:https://www.bilibili.com/video/av18156598 1.sudo权限 比如说关机.重启.添加其他用户. 2.Shell是什么? 这是一个结构图,比如在外层应用 ...
- HTML 2 (Day49)
一.table标签 http://www.cnblogs.com/shaojiafeng/p/7516741.html 二.form 表单属性 action:表单提交到哪.一般指向服务端一个程序,程序 ...
- Soap 教程
SOAP 构建模块 一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素: · 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息 · 可选的 Header 元素 ...
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...