欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET—Session

程序员文章站 2022-06-11 11:42:45
...

是什么

  Session是服务端的一种状态保持机制(Cookie是客户端的状态保持机制),它可以存储各种类型的数据,这些数据存储在服务端的内存中。默认过期时间是20分钟,但是可以自行更改它的过期时间。

原理

  当客户端发送一个请求之后,服务端创建一个对应用户的Session存储到服务器端的内存中,随后服务端会将SessionID添加到响应报文中,以Cookie的方式返回给客户端,返回的Cookie中存储的是SessionID,因为没有指定过期时间,所以会存储在客户端的浏览器内存中。当浏览器再次发送请求的时候,会将SessionID添加到报文中,服务端根据接收到的SessionID,去读取相应的内容。如果超过Session的过期时间,它就会自动消失。

创建方式

string userName = Request.Form["txtUserName"];
//创建Session
Session["userName"] = userName;
//设置Session的过期时间
Session.Timeout = 30;

应用场景

  判断用户是否登录:对一些需要登录以后才能访问的页面,可以通过校验Session值来判断用户是否登录,如果session有值说明用户已经登录了,如果没有值说明用户没有登录

需要注意的地方

  1. 一般处理程序如果用到Session,必须实现 System.Web.SessionState.IRequiresSessionState 这个接口。
  2. 使用Session之前一定要判空
  3. 验证完验证码之后,一定要及时清除Session。一是因为如果不清除Session,就有可能被黑客利用第三方程序去暴力**密码。一般验证码都是存在于Session中的,之所以加图片验证码就是防止暴力**,因为机器识别验证码要困难一些,所以图片验证码可以增加一些安全因素。如果不清除Session的话,黑客就可以一直去尝试暴力**。二是Session存在与服务器的内存中,十分占用内存,及时清除Session会释放一些资源。

string txtCode = Request.Form["txtCode"].ToString();
string sysCode = Session["validateCode"].ToString();                
if (sysCode.Equals(txtCode, StringComparison.InvariantCultureIgnoreCase))
{
    isSucess = true; 
    //清除Session
    //1.出于安全考虑。如果有人写了一个第三方黑客程序,因为Session在20分钟之内是不会变的,所以黑客就可以尝试暴力**
    //2.释放服务器资源,Session占用内存
    Session["validateCode"] = null;
}

  4. 退出登录的时候。当用户点击退出要回到首页的时候,这时候要清除Session和Cookie,因为如果不清除Cookie就会再一次自动登录,这样就无法让用户退出。如果不清除Session那么用户即使退出登录也可以访问到其他的页面。