ASP.NET Session概述
来源:互联网 发布:ip地址与域名 编辑:程序博客网 时间:2024/05/04 12:39
Session是服务端一种状态保持机制,可以将各种类型数据存储到Session,最终这些数据是存储到服务器的内存中。
请求响应过程
用vs建一个web窗体test.aspx
在test.aspx中填写代码
<form id="form1" runat="server"> <div> <input type="text" name="txtName" value="hello" /><br /> <input type="submit" value="提交"/> </div></form>
在test.aspx.cs中填写代码
protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { string name = Request.Form["txtName"]; Session["userName"] = name;//创建Session,userName是键,name存的是值 Response.Redirect("test2.aspx");//跳转到test2.aspx } }
用vs建一个test2.aspx
在test2.aspx.cs中填写代码
protected void Page_Load(object sender, EventArgs e) { if (Session["userName"]!=null)//获取Seeion之前要判断是否为空 { Response.Write(Session["userName"]);//获取Session的值 } }
在浏览器中浏览test.aspx,点击提交按钮
请求过程如下
点击提交按钮后,浏览器将hello发送给服务器,服务器开始执行test.aspx.cs中的代码。
这段代码会,接收到hello,创建一个Session(键为userName,值为hello),服务器会在内存中开辟Session的存储区域,这个存储区域再分响应的存储单元,并为每个单元加上一个编号,这个编号就是SessionID。
执行到Redirect的时候,服务器向浏览器返回一个302和Location,这时SessionID会以Cookie的形式返回给浏览器,存储在浏览器的内存中。
浏览器接受到服务器返回的数据以后发现是302,那么浏览器会重新想Location指定的页面(test2.aspx)发送请求,同时将SessionID放在请求报文中,发送到服务端对应的页面中。
服务器(test2.aspx)接收到客户端通过Cookie传递过来的SessionID,从对应的存储单元获取相应的值。
过期时间
Session的默认过期时间是20分钟,20分钟之后服务器内存中的Session就没了。这时候再请求Session就请求不到了。但这时候浏览器中还有SessionId,但把浏览器关了之后就没了。
还有一种情况,比如我在第10分钟的时候把浏览器关了,之后再重新访问Session,这时候也是访问不到的,因为浏览器中的SessionId没了。但因为还没有到20分钟,服务器中的内存是有Session的。
这个过期时间是一个滑动过期时间,比如,当Session创建之后,就开始计时,当我在第10分钟的时候请求了一次Session,这时候其过期时间又变成了20分钟。
可用Timeout属性来设置其默认过期时间。
Session.Timeout=30;//设定为30分钟
应用
后台管理的主页面必须要登陆之后才可以访问的,但如果我知道主页面的地址,并且系统没有加限制,我可以直接在地址栏访问主页面,那登陆页面就没有意义了。
可以在登陆信息都正确之后,将用户信息存储到Session中。在需要登陆以后才能访问的页面中校验Session,如果Session有值,说明用户登陆了,继续访问页面,如果没有值,说明用户没有登陆,那么跳转到登陆页面。
如果我登陆之后才能访问的页面非常多,难道要每个页面都校验一次Session是否为空?
新建一个类PageBase
public class PageBase:System.Web.UI.Page{ //PreInit事件:在页 System.Web.UI.Control.Load 事件之前发生。 protected void Page_PreInit(object sender,EventArgs e) { if(Session["userInfo"==null]) { Response.Redirect("Login.aspx"); } }}
以前的aspx.cs中的类都是继承Page,现在改成继承PageBase
- ASP.NET Session概述
- asp.net中Session概述
- ASP.NET Session Session 详解
- 第一章 ASP.NET概述
- ASP.NET 'Atlas' 概述
- ASP.NET Cookie 概述
- ASP.NET概述
- ASP.NET Cookie 概述
- ASP.NET概述
- ASP.NET 缓存概述
- Asp.Net MVC 概述
- asp.net主题概述
- asp.net ajax概述
- ASP.NET Cookie 概述
- asp.net编译概述
- ASP.NET 缓存概述
- ASP.NET MVC 概述
- ASP.NET AJAX 概述
- |洛谷|NOIP2009|模拟|P1067 多项式输出
- Java-LeetCode-Longest Substring Without Repeating Characters
- Eclipse Mars.2 JSP文件字体大小设置
- php中json_decode()、json_encode()和js中JSON.parse()的使用方法
- 使用ueditor总结
- ASP.NET Session概述
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C
- JAVA基础知识之数据类型
- ReactNative-WebView组件
- 四台数据库服务器安装 MySQL 5.7 ,(实现多级主从 +multisource )
- Keepalived 设置master故障恢复后不重新抢回VIP(解决nopreempt无效)
- 命令模式
- 第二周 项目三-- (体验复杂度)汉诺塔
- 第二周 项目3 体验复杂度(1)两种排序算法的运行时间