【问题标题】:Separate cache per browser?每个浏览器单独缓存?
【发布时间】:2016-04-05 14:39:49
【问题描述】:

目前我正在设置缓存路径如下:

CefSettings settings = new CefSettings();
settings.CachePath = mycachePath;

Cef.Initialize(settings);

var browser = new ChromiumWebBrowser(myUrl);

以上工作。

但是,我需要同时登录到具有 2 个不同帐户的网站,但它使用相同的 cookie 容器。因此,如果我使用一个帐户登录,然后使用另一个帐户登录,则第一个帐户将被覆盖。

每个浏览器都可以有一个缓存路径吗?

或者有没有更好的方法来处理这种情况?

【问题讨论】:

  • 如果可能的话,您可以在私人会话中轻松打开第二个浏览器
  • @cFrozenDeath 如何在私人会话中打开第二个浏览器?
  • 这取决于您是手动打开浏览器还是以编程方式打开浏览器。如果是第一个,请右键单击 Chrome 并选择“新建隐身窗口”;如果是第二个,这取决于您使用的类以及它是否允许您使用
  • @cFrozenDeath 我正在使用如上所示的代码进行操作。

标签: c# visual-studio-2012 chromium-embedded cefsharp


【解决方案1】:

这是旧的,但我刚刚遇到它,它需要一个更完整的答案。您可以根据需要打开任意数量的浏览器实例,每个实例都有自己独立的缓存和独立于其他的 cookie。您所要做的就是为每个浏览器设置CachePath 设置属性,确保其路径不同,然后创建浏览器。

您可能会使用此选项的示例场景是选项卡,其中 Tab1 具有 Browser1,Tab2 具有 Browser2,等等,并且每个浏览器实例都不知道其他浏览器实例。这是通过在创建之前为每个浏览器提供自己的缓存路径来实现的。

在 VB .NET 中:

        CEFPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\My\Special\Cache\Path"

        If Not Directory.Exists(CEFPath) Then
            Try
                Directory.CreateDirectory(CEFPath)
            Catch ex As Exception
                MsgBox("Error creating cache directory" + vbCrLf + CEFPath,, "Error")
            End Try
        End If

        Dim settings As New CefSettings()
        settings.CachePath = CEFPath

        'Settings.Proxy = new ProxyOptions(ip: "myipaddress", port: "myport", username: "myusername", password: "mypassword")

        ' initialization before creating instance
        If CefSharp.Cef.IsInitialized = False Then
            CefSharp.Cef.Initialize(settings)
        End If

        browser = New ChromiumWebBrowser("")

        Dim requestContextSettings As New RequestContextSettings()
        requestContextSettings.CachePath = CEFPath
        'Optional:
        requestContextSettings.PersistSessionCookies = True

        'https://github.com/cefsharp/CefSharp/wiki/General-Usage
        browser.RequestContext = New RequestContext(requestContextSettings)

我正在使用 NuGet 包 v83.4.20

【讨论】:

    【解决方案2】:

    您似乎在使用CefSharp?如果是这样,翻看代码,似乎你想创建一个带有空CachePath的浏览器:

    /// <summary>
    /// Returns the cache path for this object. If empty an "incognito mode"
    /// in-memory cache is being used.
    /// </summary>
    string CachePath { get; }
    

    看看他们的sample(我假设没有窗口),这看起来会大致得到你想要的:

    var browserSettings = new BrowserSettings();
    var requestContextSettings = new RequestContextSettings { CachePath = "" };
    
    using(var requestContext = new RequestContext(requestContextSettings))
    using (var browser = new ChromiumWebBrowser(TestUrl, browserSettings, requestContext))
    {
        ...
    }
    

    【讨论】:

    • 我认为这个答案不适用于当前版本(63.0),因为不再有这个 Instantiate Method ChromiumWebBrowser(string url, BrowserSettings, RequestContext)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2017-06-06
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多