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

  • 相关阅读:
    android stdio 打包
    ASP调用WEBSERVICE并对返回结果进行解析时遇到的问题
    ASP导出数据到excel遇到的一些问题
    HTML + CSS短标题(二,三,四文字长度)两端对齐的方式
    下拉列表被flash覆盖的解决方法
    html加C#上传文件
    实际项目中遇到EF实体类的操作问题及操作方法
    解决ASP.NET上传文件大小限制------(转载人家的博客很好用,略作修改)
    关于ASP.NET MVC的权限认证的一些总结
    Django验证码
  • 原文地址:https://www.cnblogs.com/WangShuaishuai/p/7456635.html
Copyright © 2020-2023  润新知