每当我在.NET Core 3.1应用程序上启用Windows身份验证时,我的会话变量似乎不再在请求中持久存在。每当我关闭Windows身份验证时,Session变量都会再次起作用。
我在Startup.cs的ConfigureServices()部分中启用了Session变量:
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)中设置了这样的会话变量:
<div>
@Context.Session.SetString("testvar", "123");
</div>
在另一个Razor页面(GET.cshtml)上,我检查该变量是否持久:
<div>
@Context.Session.GetString("testvar")
</div>
当在web.config中启用Windows身份验证时,从SET.cshtml到GET.cshtml时,会话变量“ testvar”不会保留(GET.cshtml应该显示“ 123”,但不会显示)。当我禁用Windows身份验证时,它将再次开始工作(GET.cshtml正确显示“ 123”)。
可能是什么问题呢?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句