从 .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}");
}
}
当我从其他站点发布到我们的站点时,我在访问 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}");
}
}