一、session介绍:
1. session和cookie的区别在于,cookie是把信息保存在用户本地的浏览器中,而session是把信息保存在服务器端的内存中,
2. 浏览器向服务器发送一个类键值对的数据,同时还会生成一个sessionID,这样才会保证数据的正确性。
3 . session的默认有效期为20分钟
4. session的主要作用是用来登录,登录时需要校验用户输入的用户名和密码都正确,如果正确,那么会将用户的信息存储到session中,在需要登录以后才能访问的页面中校验session,如果session有值,说明用户登录了,继续访问页面,如果没有值,说明用户没有登录,那么跳转到登录页面,让用户重新进行登录,防止用户跨过登陆直接进入主页面
5. asp后台使用session时可以直接使用,因为该程序继承了session的接口,但是其余的需要继承session
6. 创建和写入session:
a. 创建session对象
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace CZBK.ItcastProject.WebApp._2015_5_31 9 { 10 public partial class SessionDemo : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 if (IsPostBack) 15 { 16 string name=Request.Form["txtName"]; 17 //创建session 18 Session["userName"] = name; 19 // Session.Timeout = 30; 20 Response.Redirect("Test.aspx"); 21 } 22 23 } 24 } 25 }
//取出session的值
protected bool CheckValidateCode() { bool isSucess = false; if (Session["validateCode"] != null)//在使用Session时一定要校验是否为空,因为如果为null的时候,执行到后面的.tostring()代码会出异常 { string txtCode = Request.Form["txtCode"];//获取用户输入的验证码。 //获取session值 string sysCode = Session["validateCode"].ToString(); //equals方法需要两个参数,第一个是对比的字符串,第二个如果是字母表示不计大小写 if (sysCode.Equals(txtCode, StringComparison.InvariantCultureIgnoreCase)) { isSucess = true; Session["validateCode"] = null; } } return isSucess; }
清除session: Session["validateCode"] = null;
为session设置有效时间:
Session.Timeout = 30;
b . aspx文件使用session,直接 context.Session["名称"] = code; 如 context.Session["validateCode"] = code;
c . ashx文件以及一些其余的文件使用session,必须实现.IRequiresSessionState 接口,具体代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace CZBK.ItcastProject.WebApp._2015_5_31 7 { 8 /// <summary> 9 /// ValidateImageCode 的摘要说明 10 /// </summary> //使用session创建对象,必须引入以下System.Web.SessionState.IRequiresSessionState 11 public class ValidateImageCode : IHttpHandler,System.Web.SessionState.IRequiresSessionState 12 { 13 //在一般处理程序中如果要使用Session必须实现.IRequiresSessionState接口. 14 public void ProcessRequest(HttpContext context) 15 { 16 context.Response.ContentType = "text/plain"; 17 Common.ValidateCode validateCode = new Common.ValidateCode(); 18 //创建一个4位数字的图形验证码 19 string code=validateCode.CreateValidateCode(4); 20 //创建session对象 21 context.Session["validateCode"] = code; 22 validateCode.CreateValidateGraphic(code,context); 23 } 24 25 public bool IsReusable 26 { 27 get 28 { 29 return false; 30 } 31 } 32 } 33 }
二、使用session遇到的问题。
使用session如果项目比较大,可能会面临着创建一个集群,就是指把项目部署在不同的多个机器上,这样用户存储session时可能存储在A机器中,但是校验的时候就可能会访问的是B机器,这样,session的值就是一个null值。所以,就需要用到一个分布式缓存,就是指把所有的session值统一放置在一个服务器上,比如用到memcache,或许Redis。
分布式缓存访问我的此博客:https://www.cnblogs.com/wangjinya/p/10706739.html