【问题标题】:Storing user variables in database vs session in asp.net将用户变量存储在数据库中与 asp.net 中的会话
【发布时间】:2010-07-28 15:17:40
【问题描述】:

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

【问题讨论】:

    标签: asp.net database session


    【解决方案1】:

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

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

    数据库:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在很多情况下,我使用Session 来存储关于...嗯...“会话”的临时数据。在 ASP.NET 中,会话是可配置的。您可以使用使用服务器内存的in-proc(默认)。您还可以将会话配置为使用数据库或会话管理工具(以防服务器内存出现问题或移动到集群/场环境)。

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

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

          说了这么多,在我的一些应用程序中,我已将会话配置为使用 SQL。和直接使用数据库基本一样,不过我不用处理DAL……只要让框架为你工作。

          【讨论】:

            猜你喜欢
            • 2011-09-01
            • 2015-05-06
            • 2015-10-09
            • 1970-01-01
            • 2021-02-20
            • 2011-08-30
            • 1970-01-01
            • 2012-10-26
            相关资源
            最近更新 更多