2011-12-16 58 views
4

一旦用户初始进行了身份验证,就有要求保留用户数据的要求。我们不想打到数据库来查找用户每次他们导航到一个新的视图等...在MVC中保留用户数据3

我有一个用户类是[序列化],因此它可以存储在会话中。我也使用SQL服务器来处理会话状态。我正在考虑在会话中存储对象,但我真的很讨厌这样做。

最近开发者如何处理这种类型的需求?

+0

你想要坚持什么数据?你的意思是跟踪用户活动?你使用默认的胜利表单身份验证? – 2011-12-16 19:53:51

+0

我有一个小用户类,其中有一些道具。 userId,用户名,lastlogin日期等。 – 2011-12-16 20:12:05

回答

0

方式三:

  1. 加密在cookie中的数据并将其发送给客户端,解密,只要你需要它
  2. 在高速缓存,会话的ID(例如用户ID),它存储服务器端,或任何其他存储(比cookie更安全)。如果你使用ORM
0

假设你的用户对象

  • 使用二级缓存策略并不大,我认为这是可以接受的,将其存储在会话中不经常更改。
    既然你已经有了一个sql服务器会话,你将会进行SP调用来拉/推数据,并且添加一个小对象,与其他选项相比,它应该具有最小的性能问题,比如将其保存到客户端并将其发回在每一个请求。 我也会认为服务器是一个更安全的地方来保存这些信息。
    当您将它存储在sql中时,您希望最大限度地减少写入会话(请求锁定)的次数,因为它是在排他锁定会话的密封类中实现的。如果此会话中的任何其他请求需要对SQL会话的写入访问权限,则它们将被初始请求阻止,直到它释放会话锁定。 (.NET 4中有一些新的钩子允许您在访问会话之前更改管道中的SessionStateBehavior)

    如果SQL会话存储区的perf是一个问题,那么您可以考虑使用会话状态服务器(appfabric) 。