zoukankan      html  css  js  c++  java
  • 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可以省略

  • 相关阅读:
    配置 Linux 服务器 SSH 安全访问的四个小技巧
    线性代数
    转载的其它人博客
    c#下dll引入错误的问题
    游戏中简单代码
    明年的任务
    c# 异步通信网络中存在的问题
    解决导入五万条数据缓慢问题
    c#中关于结构体和字节数组转化
    写给现在的自己
  • 原文地址:https://www.cnblogs.com/WangShuaishuai/p/7456635.html
Copyright © 2011-2022 走看看