我们在使用AspNet Core 2.2时遇到了一个问题 aspnet core 2.2 与 Facebook WebView (https:/developers.facebook.comdocsmessenger-platformwebview。).
这个问题只发生在使用Messenger.com或facebook.com的聊天功能的桌面浏览器上。我们开发了一个聊天机器人,对话中有一些按钮,当用户点击该按钮时,一个WebView显示我们的网页。当用户点击那个按钮时,一个WebView显示了我们的网页。这个webapplication是一个aspnet core mvc webapp(在Azure App Service中的hosten),在服务器端的一个控制器动作创建了一个cookie并将其写入Response中。
var cookieOptions = new CookieOptions()
{
IsEssential = true,
Expires = DateTime.UtcNow.AddYears(1),
};
Response.Cookies.Append("COOKIE_NAME", "cookievalue", cookieOptions);
当这个页面从Facebook WebView(来自FB聊天机器人)加载时,上面(在服务器端)创建的cookie不见了。
在aspnet核心网页项目中 启动.cs cookie中间件是这样配置的。
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseCookiePolicy();
...
}
我试过了
document.cookie = "COOKIE_NAME=cookievalue";
使用asp.net fwk 4.7.2和Facebook webview也能正常工作。
在移动应用程序(Messenger)中,它的工作原理与我预期的一样,cookie是可用的。
我认为问题的源头可能是在WebView中,因为从普通浏览器加载时,页面可以完美运行--而不是从WebView(Chrome、IE、Edge、FF、Safari等)加载,cookie(服务器端和客户端创建)都可以使用。
使用aspnet core 2.2和Facebook WebView的方案会有什么问题?
谢谢帮助!
最后我找到了问题所在。chrome的cookie策略设置改变了。https:/www.google.comchromeprivacy这就是为什么我遇到了上面的问题。
解决办法: 我必须将这些cookie的samesite设置改为'SameSiteMode.None'。
var cookieOptions = new CookieOptions()
{
Secure = true,
SameSite = SameSiteMode.None,
IsEssential = true,
Expires = DateTime.UtcNow.AddYears(1),
};