Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在MVC 3中持久化用户数据_Asp.net Mvc 3_Authentication_Persistence - Fatal编程技术网

Asp.net mvc 3 在MVC 3中持久化用户数据

Asp.net mvc 3 在MVC 3中持久化用户数据,asp.net-mvc-3,authentication,persistence,Asp.net Mvc 3,Authentication,Persistence,我被要求在用户进行初始身份验证后保存用户数据。我们不希望每次用户导航到新视图时都点击数据库来查找用户,等等 我有一个[可序列化]的用户类,因此可以将其存储在会话中。我也在使用SQLServer作为会话状态。我想在会话中存储对象,但我真的很讨厌这样做 现在开发人员是如何处理此类需求的?有三种方法: 加密Cookie中的数据并将其发送给客户端,在需要时解密 通过缓存、会话或任何其他存储(比cookie更安全)中的Id(例如用户Id)在服务器端存储it 如果使用ORM,请使用二级缓存策略 假设您的用户

我被要求在用户进行初始身份验证后保存用户数据。我们不希望每次用户导航到新视图时都点击数据库来查找用户,等等

我有一个[可序列化]的用户类,因此可以将其存储在会话中。我也在使用SQLServer作为会话状态。我想在会话中存储对象,但我真的很讨厌这样做

现在开发人员是如何处理此类需求的?

有三种方法:

  • 加密Cookie中的数据并将其发送给客户端,在需要时解密
  • 通过缓存、会话或任何其他存储(比cookie更安全)中的Id(例如用户Id)在服务器端存储it
  • 如果使用ORM,请使用二级缓存策略

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


    如果SQL会话存储区的Perf是一个问题,您可以考虑一个会话状态服务器(AppFaby)。< /P>您想保留哪些数据?你的意思是跟踪用户活动吗?您是否使用默认的win form身份验证?我有一个小的用户类,其中包含一些道具。用户ID、用户名、上次登录日期等。不,我没有使用默认的表单身份验证或成员资格提供程序。虽然我建议将对象持久化在会话和缓存中,但是会话对象并不那么可靠。在获取对象时,首先从会话中获取对象,如果会话为空,则从缓存中获取用户对象。我使用EF 4作为我的ORM,我想我将研究选项3。哇,对于一些简单的东西来说,这是一个巨大的代码负载。它看起来也不能很好地与我获取DbContextyou可以使用一个简单的内存中基于键值的数据库,如memcached。