iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
佛心分享-IT 人自學之術

靠近 ASP .NET Core 一點點系列 第 26

Day 26 Session : 保留資料狀態方式之一

  • 分享至 

  • xImage
  •  

分享主軸

  • Session 原理
  • Session 設定

Session 與瀏覽器的交互行為

Session 是一種在 Server 端存儲用戶資料的機制,當用戶第一次訪問應用程式時,Server 會創建一個唯一的 Session ID ,並將其存儲在用戶的瀏覽器 Cookie 中,每次用戶發送請求時,瀏覽器會將這個 Session ID 發送回 Server,Server 根據這個 ID 來找到相應的 Session 資料狀態

交互流程圖

https://ithelp.ithome.com.tw/upload/images/20241010/20133954vQJkTiG4cS.png

Session 設定

Program.cs

builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(20);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});

...

app.UseSession();

...

Controller(設定 Session 與 取得 Session )

public class HomeController : Controller
{
    public IActionResult Index()
    {
        // 設置 Session 值
        HttpContext.Session.SetString("Test", "Hello World");
        return View();
    }

    public IActionResult About()
    {
        // 獲取 Session 值
        string sessionValue = HttpContext.Session.GetString("Test");
        ViewBag.SessionValue = sessionValue;
        return View();
    }
}

非控制器地方使用到或是寫成共用,如下範例

public class SessionService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public SessionService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void SetSessionValue(string key, string value)
    {
        _httpContextAccessor.HttpContext.Session.SetString(key, value);
    }

    public string GetSessionValue(string key)
    {
        return _httpContextAccessor.HttpContext.Session.GetString(key);
    }
}

設定說明

1. Cookie 設定

  • Cookie.HttpOnly:設置為 true 時,Cookie 只能通過 HTTP 請求,無法通過 JavaScript 訪問,這有助於防止跨站腳本攻擊(XSS)

  • Cookie.IsEssential:設置為 true 時,即使使用者未同意 Cookie 政策,這個 Cookie 也會被存儲

  • Cookie.Path:設置 Cookie 的路徑,默認為 /

  • Cookie.Domain:設置 Cookie 的域名,默認為當前域名

2. IdleTimeout

  • IdleTimeout:設置 Session 的過期時間,當用戶在這段時間內沒有活動時,Session 會自動過期。默認為 20 分鐘

3. IOTimeout

  • IOTimeout:設置從存放區載入 Session 或將其認可回到存放區時所允許的最大時間,這個設定主要用於控制 Session 存取的性能

參考文章

https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0

https://www.aspsnippets.com/Articles/4723/Net-Core-8-Using-Session-in-ASPNet-Core/


上一篇
Day 25 ASP .NET Core MVC
下一篇
Day 27 ActionResult 與 IActionResult
系列文
靠近 ASP .NET Core 一點點27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言