session

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

【Session使用】

一、ASP.NET中

用 session之前先加引用
using System.Web.SessionState;

System.Web.SessionState命名空间提供可将特定于某个单个客户端的数据存储在服务器上的一个 Web 应用程序中的类和接口。会话状态数据用于向客户端提供与该应用程序保持持久连接的样式。状态信息可以存储在本地进程内存中,或者,对于网络场配置,也可以使用 ASP.NET 状态服务或 SQL Server 数据库将其存储在进程之外。会话状态可以与不支持 Cookie 的客户端一起使用。ASP.NET 可以配置为对客户端和服务器之间传输的 URL 字符串中的会话 ID 进行编码。

在加一个IRequiresSessionState

刚刚接触.net web端的朋友都会被Session坑过,莫名其妙的不能读取Session数据,后来知道原来有IRequiresSessionState这个接口,不继承的就不能读取Session里面的数据,知道这个以后呢,也不清楚里面具体是如何实现的。对此一直不甘心,于是查了各方面的资料终于模拟出来了。

  在一般处理程序(ashx文件)里面有个一个(HttpContext Context),F12进入HttpContext 类你面你会发现它应该是用了单例的模式,里面有个 public static HttpContext Current { get; set; },应该是确定程序只有一个上下文。接下来可以找到public HttpSessionState Session { get; },这就是我们需要读取Session。
废话少说,首先说明用到了反射。我们来介绍下Type 类中的Type IsAssignableFrom(Type c);方法。假设A类继承了B接口,  Type a = typeof(A);  Type b = typeof(B); 那么 a. IsAssignableFrom(b)的值为ture;这个可以判断类是否继承了IRequiresSessionState。这是第一步。
  第二步就是找到当前访问Session的类。这个就要用到StackTrace类,从名字上来看这个类是用来跟踪代码的。这里面要用到StackTrace 的GetFrame(index)方法和GetMethod(); 。GetFrame(index)这个是从调用的最里层往外层遍历,它的返回值也是StackTrace 。是GetMethod() 返回值是MethodBase,而MethodBase的ReflectedType属性可以得到当前类的Type。

写入session  一般用在账号登陆时  网页记录账号时用


//第一次登陆 则以Session的方式记录到服务器
HttpContext.Current.Session["FName"] = userModel.FName;
HttpContext.Current.Session["FId"] = userModel.FId;
HttpContext.Current.Session["FAccount"] = userModel.FAccount;
HttpContext.Current.Session["FType"] = userModel.FType;

从Session中读取数据  一般用于读取账号内的信息   看有没有登陆过账号

public void GetSessin(HttpContext context)
{
dynamic ObjJson = new ExpandoObject();
ObjJson.success=true;
ObjJson.FType = context.Session["FType"].ToString();
ObjJson.FName = context.Session["FName"].ToString();
context.Response.Write(JsonConvert.SerializeObject(ObjJson));

}

posted on 2019-12-21 15:38  透明的鱼!  阅读(447)  评论(0)    收藏  举报

导航