Cookies Gestion dans Internet Explorer (ou versions hébergées) est liée à la propre notion de "URL des zones de sécurité" de l'IE, doc ici: About URL security Zones
Ainsi, IE détermine une zone d'URL en utilisant différents alogorithms appliqués à l'URL . Selon la zone, votre navigateur hébergé peut ou non prendre en charge les cookies de session ou persistants. Bizarrement, lorsque je crée un petit échantillon WPF, ajoutez-y le navigateur Web et naviguez jusqu'à cette page d'utilisation du testeur de cookie persistant: http://www.rbaworld.com/Security/Computers/Cookies/givecook.shtml, cela fonctionne très bien. Chaque fois que je lance l'exemple d'application, le compteur est incrémenté correctement, donc tout le monde ne peut pas reproduire votre problème. Eh bien, c'est tout le but des zones de sécurité URL: cela peut varier selon la machine, l'utilisateur, la politique de Windows, etc ...
La question suivante est: Puis-je changer la zone dans laquelle vous courez? La réponse courte et facile est ... non parce que c'est fortement lié à la sécurité.
Si vous hébergez IE vous, vous pouvez mettre en œuvre votre propre poignée de zone de sécurité comme décrit ici: Implementing a Custom Security Manager et un échantillon ici: SAMPLE: Secumgr.exe Overrides Security Manager for WebBrowser Host mais vous comptez sur le navigateur Web de WPF qui ne permet pas de dérogation ... Vous pouvez obtenir à Reflector et copier tout le code privé/interne de WPF mais c'est un journal de travail risqué!
La dernière chose que vous pouvez essayer est de manipuler le standard Internet Security Manager. Voici un exemple de code qui donne quelques indices.Vous devriez au moins pouvoir déterminer la zone dans laquelle vous vous trouvez (MapUrltoZone) et changer le cookie (TryAllowCookie). Le problème avec le gestionnaire est la norme la plupart du temps, il apparaît en boîte de dialogue à l'autorisation permettant l'utilisateur final ... (sécurité à nouveau!):
[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;
}
Bonne chance :)
Merci, cela semble être un bon point de départ. – Wilka