【问题标题】:Store session info in ASP.Net Cookie or Session State?在 ASP.Net Cookie 或会话状态中存储会话信息?
【发布时间】:2012-02-12 01:41:55
【问题描述】:

我需要为用户存储一些与会话相关的数据。此数据不需要加密,但我想确保用户无法修改它。我认为我的选择是将其存储到隐藏字段中,将其存储到 cookie 中,或将其存储在 ASP.Net 会话状态中。我需要确保服务器场安全的解决方案。

如果它存储在 cookie 或隐藏字段中,那么我需要一种方法来确保用户无法修改它。

您认为处理此类数据的最佳方法是什么?

【问题讨论】:

    标签: asp.net asp.net-mvc session cookies


    【解决方案1】:

    就个人而言,我认为最好将信息存储在cache 中,尽管您可以将其完全存储在session 中,或者将其加密并存储在cookie 中,这只是个人喜好问题

    我更喜欢cache 的原因是它不容易受到会话劫持,因此用户无法修改它,因为它存储在服务器上(在这方面与session 相同)。

    我问了一个关于使用自定义主体的问题,我在其中包含了很多可能对您有所帮助的代码。

    在缓存中存储额外用户信息的代码: Is this Custom Principal in Base Controller ASP.NET MVC 3 terribly inefficient?

    编辑:我更喜欢将这些信息存储在手边的原因是我不想一直在数据库中,因为这样做效率很低.

    【讨论】:

      【解决方案2】:

      我问自己关于会话数据的第一个问题:我真的需要它们吗? 请记住,网络是无状态的,所以也许您可以重新设计您的应用程序以不使用会话状态。 会话需要大量的管理和服务器资源。

      同时你有两个解决方案:

      • 因为您在场中,所以将会话放在 SQL Server 上,在 web.config 中配置会话状态(它需要资源,而且速度有点慢,但这是存储会话数据以确保用户无法修改它的最安全方法)

      • 使用私有服务器密钥向您的 cookie 添加加密/解密机制

      【讨论】:

      • 我同意第一个问题应该是——我真的需要这样做吗?除了存储身份验证信息之外,您还应该真正致力于尽可能地无状态。
      • 好答案。另一种方法是用于存储状态的 AppFabric 速度缓存 - 请参阅下面的答案。
      【解决方案3】:

      用户始终可以修改 cookie,因为它是客户端存储。您需要将数据存储在服务器端

      对于您的问题,ASP.NET 会话状态是一种可接受的解决方案,尽管对于服务器场有一些警告。这个MSDN article 解释了如何使会话状态适用于您的服务器场环境。 Be.St. 的回答涉及建议的进程外方法。

      第三种选择是创建一个数据库驱动的会话存储,它不一定依赖于会话状态。我发现 Session State 对于不同的部署环境(例如服务器场)有点麻烦,所以我有时会使用这种方法。然后,您可以通过将会话密钥附加到查询字符串或将会话密钥存储在 cookie 中来访问此数据(用户仍有可能修改,但不太可能成为此类操作的目标)。

      【讨论】:

        【解决方案4】:

        如果您需要使用场并希望在节点之间共享会话状态而无需一直返回数据库,您可以使用AppFabric Session Provider。设置它有一些学习曲线,但它可以完成工作并且速度很快(尽管不要在与您的应用程序相同的盒子上运行它)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-23
          • 2011-11-29
          • 1970-01-01
          • 1970-01-01
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多