[英]HttpContext.Session contains keys in one environment but not the other
我有一个 .NET Core 2.1 MVC 项目,我根据此链接逐步升级到 .NET Core 3.0。 该项目使用IHttpContextAccessor
将多个值存储在HttpContext.Session
集合中,当我在开发环境中使用 F5 启动项目时,一切似乎都正常。 但是当我将项目发布到我的测试服务器时,session 密钥集合是空的,并且值不再存在。
因为这两个环境的代码应该是相同的,所以我想它一定与项目的会话配置方式有关,但我一直无法找到解决方案。 这就是我的Startup.cs
的配置方式:
public void ConfigureServices(IServiceCollection services)
{
...
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddDistributedMemoryCache();
services.AddSession();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseSession();
...
}
我尝试用 Newtonsoft 序列化 Session object 但结果非常有限:
{"IsAvailable":true,"Id":"44b1d511-e0cb-a1a3-c117-84033b80df25","Keys":[]}
不幸的是,该项目不能自行运行,而是依赖于外部输入,因此需要花费大量时间来测试每个场景。 在我完全剥离项目之前,我想知道是否有人对我可以做些什么来确定原因提出建议。
我今天有类似的问题。 所以我更新了从已发布项目生成的 web.config 以添加以下代码。
<configuration>
...
<system.webServer>
...
<modules>
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
...
</modules>
</system.webServer>
</configuration>
注意:我在自包含模式下运行应用程序,ApplicationPool 设置为无托管代码,最后我使用 urlrewrite 反向代理到 localhost:5000 在 iis 上运行 .net 核心应用程序
我终于弄清楚了问题所在,这有点大错特错。 在Startup.cs
中添加 session 作为服务时,我似乎忘记配置 cookie 设置。 所以代替这个:
services.AddSession();
应该是这样的:
services.AddSession(options =>
{
options.Cookie.SecurePolicy = CookieSecurePolicy.None;
options.Cookie.SameSite = SameSiteMode.None;
});
为什么我让它在我的本地环境中工作仍然没有答案。 也许这与我从本地主机上的测试页面(与 MVC 项目相同的域)访问 MVC 项目但在我的测试服务器上的 MVC 项目位于不同域的事实有关。 尽管如此,现在一切都像魅力一样运作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.