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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM