gpt4 book ai didi

docker - Docker swarm 中丢失的 ASP.NET Core session

转载 作者:行者123 更新时间:2023-12-02 19:30:06 26 4
gpt4 key购买 nike

我正在将我的 ASP.NET Core 应用程序转换为在 Docker 堆栈中运行。我目前已将其配置为使用 5 个复制容器用于 Web 层,所有容器都连接到一个 MySQL 容器。该站点似乎运行良好,除了我每隔几页就退出站点这一事实,大概是因为我访问的工作节点与我登录的工作节点不同​​。我很难找到有关如何使用数据库来持久化登录 session 的在线资源,因为它们似乎被持久化在内存中。

我对为什么会发生这种情况的诊断是否正确?如果是这样,解决方案是什么?

最佳答案

我最终不得不再次重新审视这个问题,并对没有答案感到失望,但我最终解决了这个问题。我已经尝试过使用 Microsoft.Extensions.Caching.Redis设置基于 Redis 的分布式缓存:

// Persist session to distributed cache
services.AddDistributedRedisCache(options => {
options.Configuration = this.Configuration.GetConnectionString("Redis");
options.InstanceName = "RedisCache";
});

但是,每当客户端在节点之间反弹时, session 仍然会丢失。我最终发现,即使 session 被持久化到 Redis,用于加密 session token 的数据保护 key 也存储在内存中,这意味着它们会在容器更新时丢失。我用 Microsoft.AspNetCore.DataProtection.Redis 解决了这个问题.遗憾的是,这个包没有“发布”版本,但有一个预发布版本: Install-Package Microsoft.AspNetCore.DataProtection.Redis -Version 2.2.0-preview2-35157
然后我将其设置为:
var redisConnection = this.Configuration.GetConnectionString("Redis");
var redis = ConnectionMultiplexer.Connect(redisConnection);

// Persist data protection keys to distributed cache
services.AddDataProtection()
.PersistKeysToRedis(redis, "DataProtection-Keys");

// Persist session to distributed cache
services.AddDistributedRedisCache(options => {
options.Configuration = redisConnection;
options.InstanceName = "RedisCache";
});

最后一步是 绝对关键使跨服务器 session 正常工作。希望这对其他人有帮助!

关于docker - Docker swarm 中丢失的 ASP.NET Core session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52243353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com