从 .net 核心中的不同站点发布时无法访问 cookie

Unable to access cookies when posting from different site in .net core

当我从其他站点发布到我们的站点时,我在访问 cookie 信息时遇到了问题。

我是这样读饼干的

public static string GetCookie(HttpContext context, string key)
        {
            try
            {
                return context.Request.Cookies[key];
            }
            catch (Exception ex)
            {
                throw new Exception($"{methodName} | Exception : {ex.Message} | StackTrace : {ex.StackTrace} | InnerException : {ex.InnerException}");
            }
        }

并以这种方式保存 cookie

public static void SetCookie(HttpContext context, string key, string value, int expiresInMinutes = 20)
        {
            try
            {
                context.Response.Cookies.Append(key, value, new CookieOptions()
                {
                    Path = "/",
                    HttpOnly = false,
                    Secure = false,
                    Expires = DateTimeOffset.Now.AddMinutes(expiresInMinutes) 
                });
            }
            catch (Exception ex)
            {
                throw new Exception($"{methodName} | Exception : {ex.Message} | StackTrace : {ex.StackTrace} | InnerException : {ex.InnerException}");
            }
        }

假设我的站点是 https://site1.com and I have redirected to a payment gateway https://pgateway.com,当 pgateway.com 使用 GET 请求重定向时我可以访问 cookie,但是当 pgateway.com 发布数据时我无法访问。 cookie 在重定向之前已经保存。

我添加了以下信息。对于 CORS

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(); 

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
    }


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseCors(
        options => options.WithOrigins("https://pgateway.com").AllowAnyMethod()
    );
}

请帮我解决这个问题。谢谢

可能是cookie的samesite属性问题。尝试以下操作;需要安全属性。

public static void SetCookie(HttpContext context, string key, string value, int expiresInMinutes = 20)
        {
            try
            {
                context.Response.Cookies.Append(key, value, new CookieOptions()
                {
                    Path = "/",
                    HttpOnly = false,
                    Secure = true,   // updated
                    SameSite = SameSiteMode.None,  // added
                    Expires = DateTimeOffset.Now.AddMinutes(expiresInMinutes) 
                });
            }
            catch (Exception ex)
            {
                throw new Exception($"{methodName} | Exception : {ex.Message} | StackTrace : {ex.StackTrace} | InnerException : {ex.InnerException}");
            }
        }