ASP.NET MVC项目 解决session失效

Web.config配置文件

  在Web.config配置文件中,通过sessionState节点上的mode属性设置

  mode值共分为5种:

  1.InProc:

    mode默认值,只是保存当前应用程序域,重启服务session保存数据丢失。

    优点:获取数据快,没有序列化和反序列化的要求。

      缺点:占用内存,性能差。

  2.StateServer:

    优点:独立与IIS服务。

       重启ASP.NET进程,session依然有效。

    缺点:涉及过多序列化和反序列化。

  3.SQLServer:

    优点:安全,重启IIS服务后,session数据不会受到影响。

    缺点:处理缓慢,涉及过多序列化和反序列化。

  4.Custom:

    自定义session

  5.Off:

    使session失效

一、配置Web.config配置文件

  1.配置web.config文件

    <system.web>

      <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="120" />

    </system.web>

  2.控制面板-管理工具-服务-启动ASP.NET服务

二、将登录用户信息保存到Cookie中 

  1.将用户信息存储在session中

    CurrentUser currentmodel = new CurrentUser();

    currentmodel.UserAccount = usermodel.UserAccount;

    currentmodel.Password = usermodel.Password;

    currentmodel.UserID = usermodel.UserID;

    ......
    //用户信息Session

    Session["User"] = currentmodel;

  2.将用户信息存储到cookie中

    Cookie = new HttpCookie("User");

    Cookie["CompanyCode"] = currentmodel.CompanyCode;

    Cookie["DepartmentID"] = currentmodel.DepartmentID;

    Cookie["Password"] = currentmodel.Password;

    ......

    DateTime dtNow = DateTime.Now;

    TimeSpan tsTime = new TimeSpan(0, 10, 0, 0);

    Cookie.Expires = dtNow + tsTime;

    Response.Cookies.Add(Cookie);

  3.根据session是否失效进行判断,如果session失效,将cookie中的信息赋值给session

    CurrentUser currentUser = Session["User"] as CurrentUser;

    if (Session["User"] == null || currentUser == null)

    {

      HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies["User"];

      if (Cookie != null)

      {

        if (Cookie.Value != "")

        {

          currentUser = new CurrentUser();

          currentUser.CompanyCode = Cookie["CompanyCode"];

          currentUser.DepartmentID = Cookie["DepartmentID"];

          currentUser.Password = Cookie["Password"];

          ......

          Session["User"] = currentUser;

        }

      }

    }

  4.用户登录前或注销登录时,检查session是否为空,若不为空,清除cookie

    HttpCookie Cookie = null;

    Cookie = new HttpCookie("User");

    if (Cookie != null)

    {

      Cookie.Expires = DateTime.Now.AddDays(-1);

      Response.Cookies.Set(Cookie);

    }

  注:直接用cookie存储是存进去的实体对象,所以应该用子键的方式进行存储用户信息

    //创建实体对象

    CurrentUser user = new CurrentUser();

    //创建cookie对象,将user存在cookie中

    HttpCookie cookie = null;

    cookie = new HttpCookie("User");

    cookie.values["子键1"] = user.属性名1; //子键名跟属性名一致

    cookie.values["子键2"] = user.属性名2;

    cookie["子键3"] = user.属性名3; //values可以省略

原文地址:https://www.cnblogs.com/WangShuaishuai/p/7456635.html