簡體   English   中英

HttpContext.Session 在一個環境中包含鍵,但在另一個環境中不包含鍵

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM