ASP.NET—Session
是什么
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那么用户即使退出登录也可以访问到其他的页面。
上一篇: ASP.Net MVC AjaxSession过期提示
下一篇: mysql数据导入oracle