在MVC 3中保留用户数据

时间:2011-12-16 19:47:04

标签: asp.net-mvc-3 authentication persistence

我已经被要求在用户最初进行身份验证后保留用户数据。我们不想在每次导航到新视图等时都按数据库查找用户...

我有一个[Serializable]的User类,因此它可以存储在会话中。我也在使用SQL服务器进行会话状态。我正在考虑将对象存储在会话中,但我真的很讨厌这样做。

如今开发人员如何处理此类要求?

2 个答案:

答案 0 :(得分:0)

三种方式:

  1. 加密Cookie中的数据并将其发送到客户端,并在需要时对其进行解密
  2. 在缓存,会话或任何其他存储(比cookie更安全)中通过Id(例如UserId)存储服务器端。
  3. 如果您使用了ORM,则使用二级缓存策略

答案 1 :(得分:0)

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

如果SQL会话存储的性能有问题,您可以考虑使用会话状态服务器(appfabric)。