C # WPF Запуск копий приложений в разных доменах (для отдельных файлов cookie) - PullRequest
1 голос
/ 16 марта 2019

Есть задача: есть основное приложение WPF, которое запускает несколько (разное количество) копий другого приложения WPF. Каждая копия содержит компонент WebBrowser, для которого выполняется авторизация на сайте http://n.site/ Каждая копия должна иметь свою собственную область файлов cookie, поскольку каждая копия авторизует разные учетные записи. Как вы знаете, компонент WebBrowser использует «одно пространство cookie» для всех запущенных компонентов. Я прочитал, что для того, чтобы разделить это «пространство», нам нужно запускать копии в разных доменах.

Вопрос: как это сделать?

P.S. основное приложение и копии используют один и тот же внешний DLL, если это имеет значение.

P.S.S Я уже реализовал это в WinForms, и там место для файлов cookie было разным для копий приложений без изменения домена.

Буду благодарен за любую помощь!

1 Ответ

0 голосов
/ 19 марта 2019

Я нашел решение! Чтобы изменить это поведение, вам нужно изменить настройки WinINET с помощью функции InternetSetOption. Чтобы предотвратить использование общих файлов cookie при запуске копий одного и того же приложения, необходимо изменить настройки WinINET при запуске каждой копии с помощью следующей функции.

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool InternetSetOption(int hInternet, int dwOption, ref int option, int dwBufferLength);

public static void SuppressCommonCookieBehaviour()
{
    /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328%28v=vs.85%29.aspx

            INTERNET_OPTION_SUPPRESS_BEHAVIOR (81):
                  A general purpose option that is used to suppress behaviors on a process-wide basis. 
                  The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific behavior to suppress. 
                  This option cannot be queried with InternetQueryOption. 

            INTERNET_SUPPRESS_COOKIE_PERSIST (3):
                  Suppresses the persistence of cookies, even if the server has specified them as persistent.
                  Version:  Requires Internet Explorer 8.0 or later.
    */


    int option = 3; /* INTERNET_SUPPRESS_COOKIE_PERSIST */

    bool success = InternetSetOption(0, 81 /* INTERNET_OPTION_SUPPRESS_BEHAVIOR */ , ref option, sizeof(int));

    if (!success)
        throw new InvalidOperationException("InternetSetOption() returns false");
}
...