我在.NET 1.0中编写应用程序,然后将其更新到2.0版本后,我的会话停止了工作。
我在Startup.cs中的设置:
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(15);
options.Cookie.HttpOnly = true;
});
...
app.UseSession();
我在我的控制器上设置会话:
HttpContext.Session.SetString(SessionKey, data);
之后我重定向到包含angular:
的静态文件return Redirect($"~/index.html?test={test}");
该文件位于wwwroot文件夹中。
当我使用angular从我的应用程序中获取数据时:
$http.get(baseUrl + "/Configure/Refresh?test=" + test).then(handleSuccess, handleError("Error getting settings")
我在控制器操作中检查会话:
_logger.LogInformation($"Session: {HttpContext.Session.GetString(SessionKey)}");
它是空白的。我不知道为什么 - 在更新之前,它工作正常。
答案 0 :(得分:2)
好的,我发现了什么问题。默认情况下,更新会话后将SameSite设置为Lax。之前是没有。我将此值设置为Strict,并且一切正常。
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(15);
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict;
});
文章:https://www.sjoerdlangkemper.nl/2016/04/14/preventing-csrf-with-samesite-cookie-attribute/