Session详解、ASP.NET核心知识(8)

8/10/2015来源:ASP.NET技巧人气:1275

session详解、asp.net核心知识(8)

介绍一下Session

1.作用

Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session)。

在本篇博文的姊妹篇《Cookie详解》中,黑兔在最后说了几点Cookie的缺陷,简单的说就是无法存储重要数据。那么关乎重要数据的状态如何存储?Cookie妹妹Session讲给你一个很好的答案。

2.医生的账本

需要一种“服务器端的Cookie”:医生需要一个私人账本,记录病人编号和身份的对应关系。由于身份证无法造假,所以能够保证信息不被假冒。(身份证无法造假,这个身份证就可以唯一标识这个用户;)核心信息放到服务器上,客户端无法去篡改。这就是Session的大体原理。

3.IRequiresSessionState

Cookie不能存储机密数据。要使用ASP.Net已经内置的Session机制。普通的HttpHandler要能够操作Session,要实现IRequiresSessionState接口,这个接口是没有任何方法的“标记接口”,因为session处理会稍微降低系统性能,所以 HttpHandler 默认不处理Session,asp.net引擎如果看到ashx实现了IRequiresSessionState,则帮咱们处理。

4.自毁装置

Session有自动销毁机制,如果一段时间内浏览器没有和服务器发生任何的交互,则Session会定时销毁。这也就是为什么一段时间不操作,系统就会自动退出。

当然Session也可以手动设置销毁,比如做安全退出的功能。就需要用到。 context.Session.Abandon();//销毁Session

5.自毁倒计时

在web.config的system.web节点下配置sessionState节点的timeout,单位是分钟,默认是20(也只是一个建议,也许服务器10分钟的时候就让Session失效了)

.NET中如何使用Session

1.Session中可以存放任意类型

1      //Cookie 的值是String2      //Session的值可以是几乎任何类型3      context.Response.ContentType = "text/html";4      context.Session["test1"] = "HelloWorld";5      context.Session["test2"]=888;

2.登录案例

这个案例意图在演示Session的使用,而绝对不是真的登录,项目中这样写,肯定被打死。。。

1)Login页面

 1         //一个比较好的小习惯,吧Session的名字设置成一个常量字段, 2         //以后可以直接引用这个字段,防止写错。 3         public const string LOGINUSERNAME = "LoginUserName"; 4         public void PRocessRequest(HttpContext context) 5         { 6             context.Response.ContentType = "text/html"; 7             string username = context.Request["username"]; 8             string passWord = context.Request["password"]; 9             if (password == "123")10             {11                 context.Session[LOGINUSERNAME] = username;12                 context.Response.Redirect("Main.ashx");13             }14             else15             {16                 context.Response.Write("密码错误");17             }18         }

2)需要登录才能看到的页面

 1  public void ProcessRequest(HttpContext context) 2         { 3             context.Response.ContentType = "text/html"; 4             string username = (string)context.Session[Login1.LOGINUSERNAME]; 5             if (username == null) 6             { 7                 context.Response.Redirect("login.html"); 8             } 9             else if (username == "admin")10             {11                 context.Response.Write("哇,老大好!");12             }13             else14             {15                 context.Response.Write("当前登录用户名"+username+"没有权限查看");16             }17         }