我在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;
});
}
一切正常,会话保持它的Session Id和数据。我把一些预订信息放在那里。然后我重定向用户到支付页面。支付成功后,用户通过POST被重定向回我的网站 PaymentController Success 操作。
显然,来自支付平台的此POST请求不包含会话cookie,因此我只需要在PaymentController Success操作中执行RedirectToAction(“ContinueBooking”,“Payment”)。
重定向到操作后,浏览器发送会话cookie,但是此时会话似乎已经丢失,并分配了一个新的Session Id,所有数据都丢失了。有什么办法可以防止这种情况吗?还是我应该在我的情况下使用数据库来存储重定向之间的数据(我可以通过支付终端绕过一些参数)?
options.IdleTimeout = TimeSpan.FromSeconds(10);
。尝试将其增加到60秒,看看是否会以相同的方式运行。此外,我猜想您只是在本地机器上进行测试,并没有使用负载均衡器。如果您的应用程序在负载均衡器后面,则需要使用DataProtection
API,以允许应用程序从中央位置读取会话cookie。 - Shahzad Hassan