2015-10-17 145 views
0

我想爲每個用戶使用5個會話變量。我知道如果我使用inproc模式存儲這些變量,它肯定會影響性能,因爲我有共享服務器。會話變量是否太多不好的做法?

但我使用SQL Server來存儲我的會話變量。所以它會在性能上超載。

因爲如果我在會話中存儲變量,我的連接將會非常簡單,再加上一次打到db就會被保存。

+0

我強烈建議不要存儲實體的網絡會話。 – yonexbat

回答

1

爲什麼不只一個?你說你正在使用的用戶,每個用戶都有一個唯一的ID我想......我的意見是隻使用一個會議像這個唯一的ID。 (也許你允許更多帳戶與該電子郵件或同一名稱的多帳戶,但該ID肯定是獨一無二的!)。

+0

我在做什麼..每個會話變量都存儲用戶不同的信息,如 姓名,生日,EMI,ProfilePic,電子郵件..在這種情況下如何將這些信息存儲在一個會話變量中 – abc

+0

您可以創建一個對象並保存到會話變量。另外,請看看msdn上的ExpandoObject。 – JoshYates1980

0

我想說「是」,但這取決於你想達到的目標。我已經閱讀了很多有關這個主題的有才華的開發人員的博客,因爲我已經繼承了大量會話的舊應用程序。

我使用唯一的ID(guid)爲每個用戶創建一個會話,該ID用作我的MemoryCache的密鑰。 guid是在用戶通過身份驗證後創建的。如果空閒,會話默認在15分鐘後過期,緩存在20分鐘後過期。續訂是爲活躍用戶處理的。緩存的一個好處是它迫使開發人員創建乾淨的代碼(檢查和平衡),而許多會話可以幫助貢獻意大利麪代碼。

在我的BaseController中,我有一個方法使用guid獲取爲該用戶保存在緩存中的所有信息。下面是一個示例,而不是所有的代碼:

的LoginController(片斷)

userCache.UniqueID = GuidUtil.GenerateGuid() 
userCache.UserSiteCount = userSitesList.Count 
userCache.UserID = user.UserID 
userCache.UserName = user.UserName 
_registeredUserService.AddUserToCache(userCache) 
Session("UserKey") = userCache.UniqueID 

BaseController

Private Function CheckAuthentication() As Boolean 
     If Not Session("UserKey") Is Nothing Then 
      Return True 
     End If 
     Return False 
    End Function 

    Private Function GetUserKey() As String 
     Return Session("UserKey").ToString() 
    End Function 

    Protected ReadOnly Property GetUserInfo() As UserCache 
     Get 
      Return If(CheckAuthentication(), LoadUserInfo(), Nothing) 
     End Get 
    End Property 

    Private Function LoadUserInfo() As UserCache 
     Dim cachedUser = _registeredUserService.GetUserFromCache(GetUserKey()) 
     Return cachedUser 
    End Function 

AllOtherControllers(片斷)

Dim viewModel As New ChooseSiteViewModel 
viewModel.UserSites = _registeredUserService.GetUserSites(GetUserInfo.UserID) 
Return View(viewModel) 

ServiceLevel

Function GetUserFromCache(ByVal uniqueKey As String) As UserCache _ 
Implements IRegisteredUserService.GetUserFromCache 
    Dim userKey = String.Concat(CacheKeys.User.Main, uniqueKey) 
    Return _cacheService.[Get](Of UserCache)(userKey) 
End Function 
相關問題