[英]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.