Обработка файлов cookie в Internet Explorer (или в размещенных версиях) связана с собственным представлением IE "Зоны безопасности URL", документ здесь: О зонах безопасности URL
Итак, IE определяетURL-зона с использованием различных алгоритмов, примененных к URL-адресу.В зависимости от зоны ваш размещенный браузер может поддерживать или не поддерживать сеансовые или постоянные файлы cookie.
Странно, когда я создаю небольшой пример WPF, добавляю в него веб-браузер и перехожу на эту страницу постоянного тестера файлов cookie.: http://www.rbaworld.com/Security/Computers/Cookies/givecook.shtml, работает нормально.Каждый раз, когда я запускаю пример приложения, счетчик увеличивается, поэтому не все могут воспроизвести вашу проблему.В этом вся суть зон безопасности URL: она может варьироваться в зависимости от компьютера, пользователя, политики Windows и т. Д.
Следующий вопрос: могу ли я изменить зону, в которой вы работаете?Краткий и простой ответ ... нет, потому что он тесно связан с безопасностью.
Если бы вы сами размещали IE, вы могли бы реализовать собственный дескриптор зоны безопасности, как описано здесь: Реализация пользовательской безопасностиДиспетчер и пример здесь: ОБРАЗЕЦ: Secumgr.exe переопределяет диспетчер безопасности для хоста веб-браузера , но вы полагаетесь на веб-браузер WPF, который не допускает переопределения ... Вы можете перейти в Reflector и скопироватьвесь частный / внутренний код WPF, но это журнал рискованной работы!
Последнее, что вы можете попробовать, - это манипулировать стандартным Internet Security Manager.Вот пример кода, который дает некоторые советы.По крайней мере, вы должны быть в состоянии определить зону, в которой вы работаете (MapUrltoZone), и изменить куки (TryAllowCookie).Проблема со стандартным менеджером в большинстве случаев, он открывает диалоговое окно для конечного пользователя, позволяющее авторизацию ... (безопасность снова!):
[ComImport, Guid("7b8a2d94-0ac9-11d1-896c-00c04Fb6bfc4")]
private class InternetSecurityManager
{
}
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b")]
private interface IInternetSecurityManager
{
void Unused1();
void Unused2();
[PreserveSig]
int MapUrlToZone([In, MarshalAs(UnmanagedType.BStr)] string pwszUrl, out int pdwZone, [In] int dwFlags);
void Unused3();
[PreserveSig]
int ProcessUrlAction(string pwszUrl, int dwAction, ref int pPolicy, int cbPolicy, ref Guid pContext, int cbContext, int dwFlags, int dwReserved);
// left undefined
}
public static SecurityZone MapUrlToZone(Uri uri)
{
IInternetSecurityManager securityManager = (IInternetSecurityManager)new InternetSecurityManager();
int zoneId;
if (securityManager.MapUrlToZone(uri.ToString(), out zoneId, 0) < 0)
return SecurityZone.NoZone;
return (SecurityZone)zoneId;
}
private const int URLACTION_COOKIES = 0x00001A02;
private const int URLACTION_COOKIES_ENABLED = 0x00001A10;
private const int URLPOLICY_ALLOW = 0x00;
private const int URLPOLICY_DISALLOW = 0x03;
private const int PUAF_DEFAULT = 0x00000000;
public static bool TryAllowCookies(Uri uri)
{
IInternetSecurityManager securityManager = (IInternetSecurityManager)new InternetSecurityManager();
int policy = 0;
Guid context = Guid.Empty;
int hr = securityManager.ProcessUrlAction(uri.ToString(), URLACTION_COOKIES_ENABLED, ref policy, Marshal.SizeOf(policy), ref context, Marshal.SizeOf(context), PUAF_DEFAULT, 0);
return (hr == 0) && policy == URLPOLICY_ALLOW;
}
Удачи:)