Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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-会话?_Asp.net_Session - Fatal编程技术网

ASP.NET-会话?

ASP.NET-会话?,asp.net,session,Asp.net,Session,将模型存储在存储库中时要小心 一场它的行为将有所不同 比你想象的要多,而且很容易脱身 无法与数据库同步。而不是 将模型直接存储在 会话中,将id存储到模型并 用它从服务器上取 数据库 像上面这样的最佳实践是将模型的id放入会话中,然后稍后提取它,还是我应该传递整个模型?这取决于模型。如果它是一个仅与当前用户相关的实体,则暗示它可能不会通过其他用户或系统更改,并且会话是存储它的好地方。*如果每个用户经常影响某个内容,那么每个用户存储一个副本也可能是有意义的 另一方面,如果实体在用户之间共享,则应将

将模型存储在存储库中时要小心 一场它的行为将有所不同 比你想象的要多,而且很容易脱身 无法与数据库同步。而不是 将模型直接存储在 会话中,将id存储到模型并 用它从服务器上取 数据库


像上面这样的最佳实践是将模型的id放入会话中,然后稍后提取它,还是我应该传递整个模型?

这取决于模型。如果它是一个仅与当前用户相关的实体,则暗示它可能不会通过其他用户或系统更改,并且会话是存储它的好地方。*如果每个用户经常影响某个内容,那么每个用户存储一个副本也可能是有意义的

另一方面,如果实体在用户之间共享,则应将其存储在或其他集中式持久性介质中,以便只有一个权威副本;并避免在重复条目上浪费内存


*然而,这就带来了一组完全不同的问题,即缓存与每次访问数据库之间的区别,这只能通过对应用程序和使用模式进行彻底的体系结构审查来回答。与数据库连接相比,WFE(web前端)内存的需求更少。一次又一次地检索一个实体比在其他地方保存副本的影响大还是小?

这取决于模型。如果它是一个仅与当前用户相关的实体,则暗示它可能不会通过其他用户或系统更改,并且会话是存储它的好地方。*如果每个用户经常影响某个内容,那么每个用户存储一个副本也可能是有意义的

另一方面,如果实体在用户之间共享,则应将其存储在或其他集中式持久性介质中,以便只有一个权威副本;并避免在重复条目上浪费内存


*然而,这就带来了一组完全不同的问题,即缓存与每次访问数据库之间的区别,这只能通过对应用程序和使用模式进行彻底的体系结构审查来回答。与数据库连接相比,WFE(web前端)内存的需求更少。一次又一次地检索一个实体比在其他地方保存副本的难度大还是小?

我不会在会话中存储整个模型,而是倾向于使用ID方法。原因是会话将在用户在您的站点上的整个时间内保持,并且在用户移动到不再需要数据的diff页面后,会话将不会被清除。如果用户访问了您在其上执行此类型存储的多个页面,该怎么办?这可能会导致大量内存浪费

如果这是许多用户可以使用的数据,您可能需要考虑使用<代码> Cache < /C> >而不是<代码> session < /C> >,因为它将节省您在多个会话中复制相同的数据。


编辑:注意到您的便条上说这是一张订单。您可以使用该会话为用户存储“当前订单”,并在用户提交/创建订单时清除/替换该订单。您是否需要存储它,因为有多个步骤?在某些情况下,如果数据非常有限,您可以将其存储在cookie中,然后确保在完成订单后清除cookie。

我不会在会话中存储整个模型,而是倾向于ID方法。原因是会话将在用户在您的站点上的整个时间内保持,并且在用户移动到不再需要数据的diff页面后,会话将不会被清除。如果用户访问了您在其上执行此类型存储的多个页面,该怎么办?这可能会导致大量内存浪费

如果这是许多用户可以使用的数据,您可能需要考虑使用<代码> Cache < /C> >而不是<代码> session < /C> >,因为它将节省您在多个会话中复制相同的数据。


编辑:注意到您的便条上说这是一张订单。您可以使用该会话为用户存储“当前订单”,并在用户提交/创建订单时清除/替换该订单。您是否需要存储它,因为有多个步骤?在某些情况下,如果数据非常有限,您可以将其存储在cookie中,然后确保在完成订单后清除cookie。

,最好只存储ID,然后在需要时从数据库检索/更新记录

如果将整个对象存储在会话中,则基本上是在缓存它,并且需要注意所有相关的缓存问题(陈旧数据、内存大小等)

保留整个东西的好处

  • 不必返回数据库(如果会话在内存中,则速度更快)
缺点是

  • 如果其他用户/进程更新了该记录,则您现在有一条不同步记录
  • 可能的内存问题,因为您可能在会话中存储了大量数据,而不是将其作为一个整体进行管理

通过只存储id,基本上可以消除应用程序中的复杂性(尽管会向数据库添加额外调用)。

是的,最好只存储id,然后在需要时从数据库中检索/更新记录

如果将整个对象存储在会话中,则基本上是在缓存它,并且需要注意所有相关的缓存问题(陈旧数据、内存大小等)

保留整个东西的好处

  • 不必返回数据库(如果会话在内存中,则速度更快)
缺点是

  • 如果其他用户/进程更新了该记录,则您现在有一条不同步记录
  • 可能的内存问题,因为您可能在会话中存储了大量数据,而不是将其作为一个整体进行管理