簡體   English   中英

將 class 實例關聯到 asp.net 內核中的 Session

[英]Associate class instance to Session in asp.net core

我目前正在 asp.net 核心中的網絡服務器上工作。 我希望服務器處理用戶輸入和數據,並且正在尋找一個好的解決方案來為運行時保存復雜的對象。

所以我的第一個方法是使用 Sessions。 在 Asp.net 中,會話曾經像Session["key"] = new ValueObject()

在 asp.net 內核中,您只能對字節 arrays 使用方法 SetString、SetInt32 和 Set。 我發現了很多基本上將對象轉換為 Json 字符串的解決方案。 但是在我的情況下,這是不可能的,因為對象包含其他 object 引用等等。

我的第二個想法是創建一個以 SessionId 作為標識符的對象列表。 問題是每次我向服務器發出請求時,它都需要通過所有現有的會話 go 來找到匹配的會話,所以這可能會大大增加請求的時間。

所以我的問題是保存用戶相關對象的最佳方法是什么?

使用 Sessions 甚至是解決這個問題的最佳方法還是我錯過了什么?

注意:請求由 JQuery AJAX 處理,因此無法重新加載頁面以訪問數據。

您可以嘗試使用可以容納任何 .net 類型的MemoryCache 這不是問題,但鑒於它是一個共享結構,它將共享給所有用戶,因此,您必須仔細管理它。 為此,您可以使用HttpContext.Session.Id來定義 memory 緩存實例上的keys 對於示例(我沒有測試的偽代碼):

public class HomeController : Controller
{
    private IMemoryCache _cache;

    public HomeController(IMemoryCache memoryCache)
    {
        _cache = memoryCache;
    }    

    public async Task<IActionResult> CacheGetOrCreateAsynchronous()
    {
        string cacheKey = $"{HttpContext.Session.Id}_data";

        var cacheEntry = await
            _cache.GetOrCreateAsync(cacheKey , entry =>
            {
                entry.SlidingExpiration = TimeSpan.FromSeconds(3);
                return Task.FromResult(DateTime.Now);
            });

        return View("Cache", cacheEntry);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM