• 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可以省略

  • 相关阅读:
    C#小常识集锦(一)《更锋利的CSharp代码》读书笔记
    QueryBuilder 优雅的Linq To SQL动态查询(转)
    了解 NoSQL 的必读资料
    微软报表
    linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
    LINQ体验(17)——LINQ to SQL语句之动态查询
    细数那些运行在微软平台上的NoSQL数据库
    5道经典的程序题
    打造自己的LINQ Provider(中):IQueryable和IQueryProvider (转 李会军)
    Expression Examples :Report Builder
  • 原文地址:https://www.cnblogs.com/WangShuaishuai/p/7456635.html
Copyright © 2020-2023  润新知