【问题标题】:How to share Session in ASP.NET Core 3 between 2 servers?如何在两台服务器之间共享 ASP.NET Core 3 中的会话?
【发布时间】:2020-07-01 06:20:31
【问题描述】:

ASP.NET Core 3 中的一个如何在两台服务器之间共享会话(负载平衡)? 是否可以在多个 Web 服务/API 和主 ASP.NET MVC 应用程序之间共享会话?

我对 .NET Core 3 非常陌生,我习惯于在 ASP.NET Framework MVC 中处理会话状态(在此就像在站点的 IIS 配置中使用相同的机器密钥一样简单),但我'我们了解到 .NET Core 3 的一切都发生了变化,此外,随着新版本的推出,许多文档都非常过时/过时,.NET Core 1 与更高版本无关,2 与 3 无关,而且它还需要很多NuGet 包可能会或可能不再起作用。

目前我已经使用 .NET Core 3 成功实现了 SQL 会话存储,但是机器密钥选项不再显示在 IIS 中,我真的不知道如何在 appsettings.json 文件中配置它们(如果仍然使用完全)。

我们的设置是 2 台服务器,它们必须共享会话信息,使用 F5 负载均衡器,我们使用 .NET Framework MVC 的旧应用程序是这样配置的,我需要帮助才能实现相同的结果,但使用 .NET Core 3.

我通读了https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/web-farm?view=aspnetcore-3.1,但它并没有真正解释如何实际做任何事情

这个https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-3.1 也帮助配置了 SQL 会话存储,但没有帮助配置两台服务器之间的共享

还有http://www.intstrings.com/ramivemula/articles/jumpstart-44-sql-server-based-session-state-in-asp-net-core-mvc-application/

【问题讨论】:

  • 有人知道这方面的信息吗?
  • 我遇到了类似的问题,我需要在两台服务器之间共享会话。我认为解决方案是启动一个redis 缓存......至少我是这么认为的
  • 在我的情况下,我不能使用 redis,因为我们没有这样做的权限。我们必须使用 IIS
  • 如果会话仅用于身份验证,那么可能会远离会话本身并采用推荐的在 mvc 中进行身份验证的方式?如果没有,问题可能是如何以正确的方式在 mvc 中执行您的用例,因为您可能必须使用这些详细信息更新问题。会话不再是在 mvc 领域做任何事情的首选方式,并且它将继续变得越来越困难,就像在以 USB 为方式的现代硬件中找到串行端口一样。但我知道你可能有真正的会议案例,我只是说..
  • devcentral.f5.com/s/question/0D51T00006i7jOE/… 检查此页面和链接。这可能会有所帮助

标签: c# session-variables session-state .net-core-3.0 sql-session-state


【解决方案1】:

你配置DataProtection了吗?我已经有一段时间没有使用它了,但从内存来看,这是分布式会话存储在 .NET Core 中工作的重要部分

这里有一些关于 .NET Core 中的会话和 DataProtection 的额外阅读,其中提到了 MachineKey - https://andrewlock.net/an-introduction-to-the-data-protection-system-in-asp-net-core/

【讨论】:

    【解决方案2】:

    您用户的会话身份验证密钥存储在其网络浏览器中的 cookie 中。无论用户连接到哪个服务器,他们都会将他们的 cookie 传递给该服务器,服务器将使用身份验证密钥通过 SQL 对他们的会话进行身份验证。

    【讨论】:

    • 嗨,问题是我的应用程序和服务器没有发生您所描述的确切情况,在负载平衡中发生切换的那一刻,cookie 消失了,用户必须重新登录。这个问题非常真实和具体,以前版本的 .net 框架中曾经有关于如何配置场服务器设置的教程,只是没有关于如何在 asp.net core 3 中实现这一点的信息
    • 首先,检查cookie是否被保存。然后,确保将其从 Web 浏览器传递到服务器。然后,检查负载平衡器是否将 cookie 传递到您的 Web 服务器。然后检查 .NET 请求以查看原始 cookie 数据是否存在。如果您已经走到了这一步,那么 .NET 就存在问题。如果不是,那是其他问题。
    【解决方案3】:

    【讨论】:

    • 我认为可能是这样,但我必须测试它。遗憾的是,该公司暂时放弃了使用 .net 核心的项目
    猜你喜欢
    • 2012-09-17
    • 2017-06-11
    • 2017-08-10
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多