首页 新闻 会员 周边

内嵌webview2的应用,多次打开会出现用户数据覆盖的问题,怎么解决

0
悬赏园豆:20 [待解决问题]

内嵌webview2的应用程序,多次打开会出现用户数据覆盖的问题,怎么解决?
希望每次新打开程序保留上次登录的用户缓存,主要是cookie;
其实不设置默认就是这样的,但是程序双开或多开时,后一个打开的应用登录账号就会覆盖前一个的,cookie被覆盖了
(c#桌面应用)

kakaka123的主页 kakaka123 | 初学一级 | 园豆:182
提问于:2023-05-17 17:16
< >
分享
所有回答(3)
0

using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.Core.DevToolsProtocolExtension;
var webView = new WebView2();
var options = new CoreWebView2EnvironmentOptions();
// 为webView实例设置单独的存储路径
options.UserDataFolder = "C:\Temp\WebView2\Instance1";
var environment = await CoreWebView2Environment.CreateAsync(null, options);
await webView.EnsureCoreWebView2Async(environment);
在本例中,为WebView2控件的每个实例创建一个新的CoreWebView2EnvironmentOptions对象,并将UserDataFolder属性设置为每个实例的唯一文件夹。这样可以确保WebView2控件的每个实例都有自己独立的cookie存储,从而防止实例之间共享cookie。
要实现匿名模式,您可以为每个匿名窗口创建WebView2控件的新实例,并如上所述将每个实例配置为使用单独的cookie存储。这将允许用户以匿名模式浏览网络,而不会在实例之间覆盖或共享他们的cookie。

lanedm | 园豆:2381 (老鸟四级) | 2023-05-17 17:33

...
希望每次新打开程序保留上一次登录的用户缓存,主要是cookie;
...

这个怎么实现?

支持(0) 反对(0) kakaka123 | 园豆:182 (初学一级) | 2023-05-17 17:44

@kakaka123: 你需要确认一下,保存第几次弹窗的cookie?这个东西好存,在程序的bin目录下随便新建一个xml文件就可以存了,问题是存第几个弹窗的cookie?

支持(0) 反对(0) lanedm | 园豆:2381 (老鸟四级) | 2023-05-17 17:48
0

要解决内嵌 WebView2 应用程序中用户数据覆盖的问题,您可以考虑以下方法:

使用不同的 Cookie 容器:为每个应用程序实例创建一个独立的 Cookie 容器,确保每个应用程序实例都有自己的 Cookie 存储空间。这样可以避免不同实例之间的 Cookie 冲突。您可以在创建 WebView2 实例时为其设置独立的 CookieStorage,例如:
csharp
Copy code
var env = await CoreWebView2Environment.CreateAsync(null, userDataFolder);
var webView = new WebView2();
webView.CoreWebView2InitializationCompleted += (sender, args) =>
{
webView.CoreWebView2.CookieManager.SetCookieStorage(
"https://example.com",
new System.Uri("https://example.com"),
CookieStorageKind.PerHost);
};
await webView.EnsureCoreWebView2Async(env);
在上述代码中,userDataFolder 是每个实例的独立用户数据文件夹路径。通过设置 CookieStorageKind.PerHost,每个 WebView2 实例都会有自己的 Cookie 存储空间,从而避免了数据覆盖的问题。

使用多个用户数据文件夹:为每个应用程序实例创建不同的用户数据文件夹,确保每个实例都有自己的用户数据。这样可以避免不同实例之间的数据冲突。您可以在创建 WebView2 实例时指定不同的用户数据文件夹路径,例如:
csharp
Copy code
var userDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyApp_Instance1");
var env = await CoreWebView2Environment.CreateAsync(userDataFolder: userDataFolder);
var webView = new WebView2();
await webView.EnsureCoreWebView2Async(env);
在上述代码中,userDataFolder 是每个实例的独立用户数据文件夹路径。通过为每个实例设置不同的用户数据文件夹,可以确保每个实例都有自己的用户数据,从而避免了数据覆盖的问题。

通过采用以上方法,您可以在多个实例的情况下保留每个实例的用户缓存和 Cookie 数据,从而解决内嵌 WebView2 应用程序中的数据覆盖问题。

Technologyforgood | 园豆:6468 (大侠五级) | 2023-05-17 21:47

我的述求是多次打开相同的应用,当然webview2打开的也是相同的链接,只是登录账号不同(webview2页面登录)。
问题:根据什么设置不同的数据文件夹? 并且每次打开应该都需记录的是上次的登录账号?!

支持(0) 反对(0) kakaka123 | 园豆:182 (初学一级) | 2023-05-18 14:08
0

你这个使用场景是啥来着,按道理应用登录后开的web也是同一个用户这样好像没毛病。

LiveCoding | 园豆:497 (菜鸟二级) | 2023-05-22 10:59

可能是同一个用户,也可能不是同一个用户; 即时是同一个用户,登录的可能不是同一个账号!!!
有处理的想法吗?

支持(0) 反对(0) kakaka123 | 园豆:182 (初学一级) | 2023-05-24 18:01

@kakaka123: 我意思登陆应用后,内嵌web的登录人跟应用登录人一样,这样按道理没问题。

支持(0) 反对(0) LiveCoding | 园豆:497 (菜鸟二级) | 2023-05-26 08:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册