平衡服务器上的 ASP.NET Core 6 Razor Pages 问题(无粘性会话)

问题描述 投票:0回答:1

来自智利的问候!我在平衡服务器(2 个服务器)上部署 ASP.NET Core 6 Razor 时遇到问题。该服务器不使用粘性会话标志。我遇到过很多这样的场景:

  • 空白登录页面(黑屏)
  • 登录后空白页面(黑屏)
  • 登录应用程序后出现错误请求。

有时刷新网页恢复正常,但进行任何操作又出现上述问题。服务器是在 https 下配置的。

我没有在不使用粘性会话的情况下执行此操作的经验。

与 ChatGPT 合作这对我帮助很大,我正在做接下来的事情来尝试解决问题:

  • 饼干。
  • Redis 保存数据。
  • 用于验证会话的中间件代理。
  • 转发配置

这里的代码:(program.cs)

RedisCacheOptions cacheoptions = new RedisCacheOptions()
{
    Configuration = conn,
    InstanceName = "SampleInstance" + Guid.NewGuid()
};

builder.Services.AddDistributedRedisCache(options =>
{
    options = cacheoptions;
});

builder.Services.Configure<CookieAuthenticationOptions>(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    options.Cookie.Name = "MyWebsite";
});

builder.Services.Configure<CookiePolicyOptions>(options =>
{
    options.CheckConsentNeeded = context => false;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});

builder.Services.ConfigureApplicationCookie(options =>
{
    options.Cookie.HttpOnly = true;
    options.Cookie.SameSite = SameSiteMode.None;
    options.Cookie.MaxAge = TimeSpan.FromHours(5);
    options.SlidingExpiration = true;
    options.LogoutPath = $"/Licencias/Logout";
    options.AccessDeniedPath = $"/Account/AccessDenied";
});

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
    options.LoginPath = "/Login/Index";
    options.AccessDeniedPath = "/Account/AccessDenied";
    options.Events.OnSigningOut = (context) =>
    {
        context.Response.Redirect("/Login/Index");
        return Task.CompletedTask;
    };
});

应用程序配置:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedProto
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseMiddleware<ValidarSesionMiddleware>();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseCookiePolicy();

提前致谢!

asp.net cookies redis load
1个回答
0
投票

检查服务器之间 IIS 中的机器密钥是否匹配,我最近在 MVC 应用程序中设置负载平衡时遇到了类似的问题:

在网站或IIS中的虚拟目录中选择Machine Key

单击生成密钥

取消选中自动生成密钥

最后将生成的密钥复制到您的其他服务器

© www.soinside.com 2019 - 2024. All rights reserved.