衆所周知, ASP.NET的System.Web命名空間下的緩存可以用來儲存一段時間的資料
是以, 在項目中我們可能利用它來儲存一些緩存資料.
是以, 很多人寫了這樣的工具類來儲存和加載緩存
儲存緩存:
public static void SetCache(string CacheKey, object objObject)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(key, objObject);
}
public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
objCache.Insert(key, objObject, null, absoluteExpiration, slidingExpiration);
加載緩存:
public static object GetCache(string CacheKey)
return objCache[key];
但是這樣就引入了一個問題:
如果多個使用者同時通路,緩存是不是會被覆寫呢,或者同一個使用者打開不同的視窗,緩存是否會被覆寫呢?
經過測試,答案是肯定的.
那麼,如何解決這個問題呢?
我們想到了sessionId, 那個是一個使用者的會話的概念.
是以,我們隻要引入一個工具類,用來擷取使用者的會話id
public static string GetSessionId()
{
return HttpContext.Current.Session.SessionID;
}
修改後的代碼如下
string sessionId = Utility.GetSessionId();
string key = CacheKey + "_" + sessionId;
經過測試, 問題解決OK