Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core .NET Core 3.1和;Windows身份验证终止会话变量_Asp.net Core_Web Config_Session Variables_Windows Authentication - Fatal编程技术网

Asp.net core .NET Core 3.1和;Windows身份验证终止会话变量

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

每当我在.NET Core 3.1应用程序上启用Windows身份验证时,我的会话变量似乎不再在请求之间保持不变。每当我关闭Windows身份验证时,会话变量都会再次工作

我在Startup.cs的ConfigureServices()部分启用了会话变量:

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>