2015-10-17 20 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 
相关问题