在asp.net中将用户变量存储在数据库与会话中

时间:2010-07-28 15:17:41

标签: asp.net database session

我正在使用一个asp.net应用程序,它将大多数数据存储在数据库中而不是会话中。我想知道每个人的利弊,哪个是更好的方式。例如,您有一个非常繁忙的站点,而不是在会话中存储用户特定的变量,有一个名为用户数据的数据库表,它可以存储可以通过查询数据库从任何页面访问的所有用户特定数据。哪个是更好的方式,会话或数据库?

4 个答案:

答案 0 :(得分:3)

当AppDomain重置时,存储在会话状态的任何内容都将消失。

你可以通过使用一个进程外的会话状态处理程序来避免这种情况,但这并不比数据库好。

答案 1 :(得分:3)

会话(但这取决于很多会话配置):

  • 无数据库访问,或更少。
  • 临时存储:至少在会话结束时,您可能会丢失信息。
  • 可能存在一些安全问题,具体取决于您存储会话信息的位置
  • 未共享:如果您使用的是服务器场,则可能会出现问题,一台服务器可能无法访问其他服务器会话。
  • 如果客户端禁用了cookie,则可能无法正常工作。

数据库:

  • 如果您需要每页上的信息,则每次回发的数据库流量。
  • 永久存储。
  • 客户端没有存储信息(cookies ...)。
  • 共享:可从Web场中的任何服务器访问的数据。

请注意,您可以将会话信息存储在数据库中。这就是为什么我在Session部分使用“may”这个词。 见here some session configuration and possibilities

答案 2 :(得分:2)

有趣的问题。如果它的数据在会话中不重要(例如,最后一页查看) - >会话。如果它的数据应该是持久的(例如,密码) - >数据库。有趣的案例和你可能引用的案例:应该持久但经常使用的数据(比如用户名)。从这些中,我倾向于将这些值从数据库复制到会话中,这使我能够在没有数据库访问的情况下在具有琐碎任务的页面中工作。

答案 3 :(得分:2)

在许多情况下,我使用Session存储有关...... well ...“session”的临时数据。在ASP.NET中,会话是可配置的。您可以使用in-proc(默认值)使用服务器的内存。您还可以将会话配置为使用数据库或会话管理工具(如果服务器内存有问题,或者您转移到群集/服务器场环境中)。

会话是暂时的。当您真正存储有关当时正在使用您的应用程序的用户的数据时,这非常有用。当用户离开应用程序并且他/她的会话到期时,内存将被释放。您不必手动清除任何内容。

Session使用服务器的内存。只要你有足够的内存并且你不在服务器集群上,这就行得很好。内存很快,因此在会话中获取和设置数据非常快,并且使用零网络带宽。

已经说过,在我的一些应用程序中,我将会话配置为使用SQL。它与直接使用数据库基本相同,但我不必处理DAL ...只需让框架适合您。