重定向后 ASP Net Core 2.2 会话丢失
Posted
技术标签:
【中文标题】重定向后 ASP Net Core 2.2 会话丢失【英文标题】:ASP Net Core 2.2 Session lost after redirect 【发布时间】:2019-09-12 19:46:18 【问题描述】:我在 Startup.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 到 PaymentController 成功操作被重定向回我的网站。
显然,来自支付平台的这个 POST 请求不包含会话 cookie,所以我只是在 PaymentController 成功操作中执行 RedirectToAction("ContinueBooking","Payment")。
重定向到操作后 - 浏览器发送会话 cookie 但会话 此时似乎丢失并分配了新的会话ID,所有数据都丢失了。有什么办法可以防止这种情况吗?或者我应该只使用数据库在我的情况下存储重定向之间的数据(我可以通过支付终端绕过一些参数)?
【问题讨论】:
存在 app.UseSession();在启动时配置方法? @hassan.ef 当然 显示实际控制器代码。 我用这个解决方案解决了这个问题:***.com/a/50425129/2238515 @CleverAlmeida 谢谢。就我而言,我需要同意 cookie。对我来说,问题是通过设置 AddSession(x=> x.Cookie.HttpOnly=true; x.Cookie.IsEssentialTrue=true; options.IdleTimeout = Somebigvalue) 解决的 【参考方案1】:如果两个应用程序位于同一台服务器上,则两者将是相同的 cookie,第一个 cookie 将被支付应用程序的会话 cookie 覆盖。为避免这种情况,请自定义 cookie 名称:
services.AddSession(opt =>
opt.Cookie.Name = "MySessionCookie";
);
【讨论】:
谢谢,解决了我在使用授权 cookie 时遇到的问题。最终,在开发中,在不同端口之间重定向时被覆盖。【参考方案2】:我有同样的场景,我需要重定向到另一个站点(身份网关),并且这个站点发布返回带有http post的响应标识。
对我来说,使用 .net core 3.1 创建会话 cookie,但没有相同站点,我需要使用 options.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
)
【讨论】:
以上是关于重定向后 ASP Net Core 2.2 会话丢失的主要内容,如果未能解决你的问题,请参考以下文章
防止在 asp.net core 2.2 中重定向到 /Account/Login
结束会话后 ASP.NET 不会自动重定向到 defaultURL
如果会话过期,如何自动重定向? ASP.Net(从 SessionTimeout.aspx 到 Timeout.aspx)