Asp.net core .NET Core 3.1和;Windows身份验证终止会话变量
每当我在.NET Core 3.1应用程序上启用Windows身份验证时,我的会话变量似乎不再在请求之间保持不变。每当我关闭Windows身份验证时,会话变量都会再次工作 我在Startup.cs的ConfigureServices()部分启用了会话变量:Asp.net core .NET Core 3.1和;Windows身份验证终止会话变量,asp.net-core,web-config,session-variables,windows-authentication,Asp.net Core,Web Config,Session Variables,Windows Authentication,每当我在.NET Core 3.1应用程序上启用Windows身份验证时,我的会话变量似乎不再在请求之间保持不变。每当我关闭Windows身份验证时,会话变量都会再次工作 我在Startup.cs的ConfigureServices()部分启用了会话变量: public void ConfigureServices(IServiceCollection services) { //...... services.AddSession(delegate (SessionOptions op
public void ConfigureServices(IServiceCollection services)
{
//......
services.AddSession(delegate (SessionOptions options)
{
options.IdleTimeout = TimeSpan.FromSeconds(1800);
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
options.Cookie.SameSite = SameSiteMode.Strict;
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
//......
}
我使用web.config启用了Windows身份验证:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<remove name="aspNetCore" />
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" hostingModel="InProcess" disableStartUpErrorPage="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
我在一个Razor页面中设置了这样的会话变量(set.cshtml):
@SetString(“testvar”,“123”);
在另一个Razor页面(GET.cshtml)上,我检查变量是否持续存在:
<div>
@Context.Session.GetString("testvar")
</div>
@Context.Session.GetString(“testvar”)
在web.config中启用Windows身份验证时,从SET.cshtml转到GET.cshtml时,会话变量“testvar”不会持续存在(GET.cshtml应显示“123”,但不会)。当我禁用Windows身份验证时,它会再次开始工作(GET.cshtml正确显示“123”)
有什么问题吗?我找到了问题所在。我没有在Startup.cs中调用“app.UseAuthorization()” 在.NET Core中启用Windows身份验证时,需要在Startup.cs中的Configure()方法中调用app.UseAuthorization(),以便会话变量在请求之间保持不变:
我解决了这个问题。我没有在Startup.cs中调用“app.UseAuthorization()” 在.NET Core中启用Windows身份验证时,需要在Startup.cs中的Configure()方法中调用app.UseAuthorization(),以便会话变量在请求之间保持不变:
您能告诉我您在.net核心应用程序中是否使用过其他会话统计提供程序,如sql server或其他?是否所有浏览器都会出现此问题?我已经在我这边创建了一个测试演示。它工作得很好。如果可能的话,请在github上上传一个没有任何个人信息的测试项目供我们测试。@BrandoZhang我解决了这个问题,请参阅下面的答案。感谢您对其进行测试,但是您能否告诉我您在.net核心应用程序中是否使用过其他会话统计提供程序,如sql server或其他?是否所有浏览器都会出现此问题?我已经在我这边创建了一个测试演示。它工作得很好。如果可能的话,请在github上上传一个没有任何个人信息的测试项目供我们测试。@BrandoZhang我解决了这个问题,请参阅下面的答案。不过,感谢您在您的终端进行测试
<div>
@Context.Session.GetString("testvar")
</div>