ASP 网络核心 2.2 会话在重定向后丢失



我在启动中有以下会话配置.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
    })

最新更新