我在启动中有以下会话配置.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
// Make the session cookie essential
options.Cookie.IsEssential = true;
});
}
一切正常,会话保留会话ID和数据。我在那里放了一些预订信息。然后我将用户重定向到付款页面。付款成功后,用户将通过 POST 重定向回我的网站到付款控制器成功操作。
显然,来自支付平台的这个 POST 请求不包含会话 cookie,所以我只是在支付控制器成功操作中执行重定向到操作("继续预订","付款"(。
重定向到操作后 - 浏览器发送会话 cookie,但会话 此时似乎丢失了,并且分配了新的会话 ID,所有数据都将丢失。有什么办法可以防止这种情况吗?或者我应该只使用数据库来存储重定向之间的数据(我可以通过支付终端绕过一些参数(?
如果两个应用程序在同一台服务器上,则两者都将是相同的cookie,并且第一个cookie将被支付应用程序的会话cookie覆盖。为避免这种情况,请自定义 cookie 名称:
services.AddSession(opt =>
{
opt.Cookie.Name = "MySessionCookie";
});
我有同样的情况,我需要重定向到另一个站点(身份网关(,并且此站点帖子返回带有http post的响应标识。
对我来说,使用 .net core 3.1 创建会话 cookie 与同站点没有我需要使用选项。Cookie.SecurePolicy.
没有这个,就不会创建cookie。
services
.Configure<CookiePolicyOptions>(options =>
{
// not necessary
//options.MinimumSameSitePolicy = SameSiteMode.None;
})
.AddSession(options =>
{
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; // this is the key
})