ASP.NET Core MVC sesión misma URL del sitio
Tengo 2 aplicaciones ASP.NET Core MVC ejecutándose en diferentes puertos en una IP (por ejemplo, App1: 192.168.0.1:8000 y App2: 192.168.0.1:8001).
Después de iniciar sesión en App1
y luego iniciar sesión en App2
, App1
creará un nuevo SessionId
para la siguiente solicitud, por lo que no puede obtener la antigua sesión para los datos de autenticación.
Lo configuro de la siguiente manera en startup.cs
public void ConfigureServices(IServiceCollection services)
{
....
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
....
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(60);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
....
app.UseCookiePolicy();
app.UseSession();
....
}
davy.ai
El problema con los ID de sesión separados entre
App1
yApp2
se puede resolver compartiendo la misma sesión entre las dos aplicaciones. Esto se puede lograr configurando una caché distribuida para almacenar los datos de sesión, como el uso de Redis o SQL Server, en lugar de la caché en memoria predeterminada.En
ConfigureServices
, reemplaceservices.AddDistributedMemoryCache();
con un proveedor de caché distribuida como Redis o SQL Server. Por ejemplo, para usar Redis:En
Configure
, agregue el siguiente middleware para configurar la sesión compartida:Tenga en cuenta que este middleware asume que la cookie de sesión compartida se llama “SharedSessionId”. Esto se puede cambiar a cualquier nombre único deseado.
Con los cambios anteriores, tanto
App1
comoApp2
utilizarán el mismo ID de sesión y podrán acceder a los datos de sesión compartidos.