[英]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.