重定向后 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 Core 2.2 JWT 身份验证

ASP.NET Core MVC 数据库重定向后不添加对象

如果会话过期,如何自动重定向? ASP.Net(从 SessionTimeout.aspx 到 Timeout.aspx)

Asp .NET Core 2.2 Razor 页面布局和局部