【发布时间】:2015-08-27 08:10:19
【问题描述】:
实现 ASP.NET 会话管理的最佳方法是什么,当我记住我有一个巨大的对象实例要保持在会话中时,这也应该是数据库管理的,即会话 ID 保存在数据库中。
我在会话中保留的对象实例也有数据表实例。
提前感谢您的任何建议/cmets。
【问题讨论】:
实现 ASP.NET 会话管理的最佳方法是什么,当我记住我有一个巨大的对象实例要保持在会话中时,这也应该是数据库管理的,即会话 ID 保存在数据库中。
我在会话中保留的对象实例也有数据表实例。
提前感谢您的任何建议/cmets。
【问题讨论】:
ASP.NET 的会话状态提供者很少,一个是SqlSessionStateStore,它将会话状态存储在 SQL 服务器中。
您可以在MSDN 上阅读更多内容。
另一件事是在会话中存储大对象(尤其是 DataTables)似乎是个坏主意。一件事是您可能会遇到日期、锁和数据不同步的内存问题,另一件事是检索、序列化和反序列化它可能会耗费时间和资源。
【讨论】:
“最佳方式”是从会话存储中删除大对象。会话存储中的数据表实例是一个完全“永远不要像这样使用会话”的示例。
ASP.NET 会话是一个 InProc 集合(默认情况下)。它将您放置到“会话”集合的所有数据保存在当前进程内存中。因此,如果 apppool 刷新 - 你会丢失会话。
您可以尝试使用的每种类型的“会话提供程序”都需要序列化放置在会话中的数据。这对您的数据表意味着巨大的问题。
【讨论】: