C# 是否建议在会话中保存对象?

C# 是否建议在会话中保存对象?,c#,asp.net,session,C#,Asp.net,Session,我有一个ASP.NET web应用程序,我正在考虑在会话中保存整个对象User,而不是只保存UserId 推荐吗?它会导致性能低下吗?否,在会话中保存整个用户对象而不仅仅是用户ID不会导致性能问题。事实上,由于会话中有整个对象,因此可能会提高性能,因为不再需要从数据库中获取它 至于“是否推荐”?那要看情况了 使用会话意味着您的站点现在将依赖于该“状态”。因此,如果您有多个具有负载平衡功能的web服务器,那么客户的请求可能会先转到一个服务器,然后转到另一个服务器。(会话存储在每台服务器上,不共享。

我有一个ASP.NET web应用程序,我正在考虑在会话中保存整个对象
User
,而不是只保存
UserId


推荐吗?它会导致性能低下吗?

否,在会话中保存整个用户对象而不仅仅是用户ID不会导致性能问题。事实上,由于会话中有整个对象,因此可能会提高性能,因为不再需要从数据库中获取它

至于“是否推荐”?那要看情况了

使用会话意味着您的站点现在将依赖于该“状态”。因此,如果您有多个具有负载平衡功能的web服务器,那么客户的请求可能会先转到一个服务器,然后转到另一个服务器。(会话存储在每台服务器上,不共享。)

所以我个人会说:
如果你的站点很小,不需要扩展到多个服务器,那么就去吧。

我同意前面的答案。如果你有 站点小,用户数量有限, 最好将用户保存在会话对象中

在会话中保存时,可以为会话配置存储库类型, 它也可以是内存/SQL

我记得,默认值是内存,如果 如果有大量用户,可能会导致一些问题


考虑使用缓存对象,在其中您可以在字典中存储用户id和用户对象。

使用会话状态提供程序可以很容易地扩展会话状态-有SQL Server、Redis、Memcached和其他提供程序,所有这些都允许多个服务器访问同一会话状态。@Moo,是的,非常正确,有多种共享会话/缓存对象的解决方案。但是,在这种情况下,现在必须通过导线传输这些对象,在这种情况下,应该重新考虑性能问题。