C# WPF 运行 不同域的应用程序副本(用于单独的cookie)
C # WPF Running app copies in different domains (for separate cookies)
有一项任务:有一个主 WPF 应用程序,运行 是另一个 WPF 应用程序的几个(不同数量的)副本。每个副本包含一个 WebBrowser 组件,在网站上对其进行授权 http://n.site/ 每个副本必须有自己的 cookie 区域,因为每个副本授权不同的帐户。如您所知,WebBrowser 组件对所有启动的组件使用“一个 cookie space”。我读到为了划分这个 "space" 我们需要在不同的域中 运行 副本。
问题:如何做到这一点?
P.S。如果重要的话,主应用程序和副本使用相同的外部 dll。
P.S.S 我已经在 WinForms 中实现了这个,并且在不更改域的情况下,cookie 的 space 对于应用程序副本是不同的。
如有任何帮助,我将不胜感激!
我找到了解决办法!
要更改此行为,您需要使用 InternetSetOption 函数更改 WinINET 设置。为防止同一应用程序的 运行 个副本使用通用 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");
}
有一项任务:有一个主 WPF 应用程序,运行 是另一个 WPF 应用程序的几个(不同数量的)副本。每个副本包含一个 WebBrowser 组件,在网站上对其进行授权 http://n.site/ 每个副本必须有自己的 cookie 区域,因为每个副本授权不同的帐户。如您所知,WebBrowser 组件对所有启动的组件使用“一个 cookie space”。我读到为了划分这个 "space" 我们需要在不同的域中 运行 副本。
问题:如何做到这一点?
P.S。如果重要的话,主应用程序和副本使用相同的外部 dll。
P.S.S 我已经在 WinForms 中实现了这个,并且在不更改域的情况下,cookie 的 space 对于应用程序副本是不同的。
如有任何帮助,我将不胜感激!
我找到了解决办法! 要更改此行为,您需要使用 InternetSetOption 函数更改 WinINET 设置。为防止同一应用程序的 运行 个副本使用通用 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");
}