ASP.NET - 会话?

时间:2010-09-11 19:12:56

标签: asp.net session

  

将模型存储在a中时要小心   会话。它的行为会有所不同   比你想象的还容易出来   与数据库同步。代替   将模型直接存储在   session,将id存储到模型中   用它来从中获取它   数据库中。

上面的最佳做法是将模型的ID放入会话中,然后稍后提取,还是应该通过整个模型?

4 个答案:

答案 0 :(得分:1)

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

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

*但是,这会打开一组完全不同的缓存问题,而不是每次都要进入数据库,这只能通过对应用程序和使用模式的全面架构审查来解决。 WFE(Web前端)内存的需求是否低于数据库连接。是否比在其他地方保留副本更多或更少地检索实体?

答案 1 :(得分:0)

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

如果这是许多用户可能使用的数据,您可能需要考虑使用Cache而不是Session,因为这样可以节省您在多个会话中复制相同数据。

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

答案 2 :(得分:0)

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

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

保持整个事物的优势

  • 无需返回数据库(如果会话在内存中更快)

缺点是

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

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

答案 3 :(得分:0)

  

如果我需要存储用户怎么办?   输入到会话中,以便我可以重定向   到确认页面? - 然后我“有”   将模型放入会话

在这种情况下,您根本不需要将其放入会话中。将帖子直接发送到确认页面,您可以从帖子中获取值。在确认页面中,将值发送回客户端/隐藏字段或字段,具体取决于您决定发送它的方式。

还有各种不涉及使用会话的替代方案。