2008-11-15 8 views
6

J'ai des problèmes avec HttpWebRequest/HttpWebResponse et cookies/CookieContainer/CookieCollection. Le fait est que, si le serveur web n'envoie pas/n'utilise pas un "chemin" dans le cookie, Cookie.Path est égal à la partie path de l'URI de la requête au lieu de "/" ou est vide dans mon application. Par conséquent, ces cookies ne fonctionnent pas pour l'ensemble du domaine, ce qui est le cas dans les navigateurs Web appropriés. Des idées pour résoudre ce problème?Problèmes avec HttpWebRequest/HttpWebResponse et cookies

Merci d'avance

Répondre

4

Ah, je vois ce que vous voulez dire. Généralement ce que les navigateurs font vraiment est de prendre le dossier contenant le document comme le chemin; pour '/login.php' ce serait '/' donc cela fonctionnerait effectivement sur l'ensemble du domaine. '/potato/login.php' serait limité à '/ potato /'; quoi que ce soit avec des parties d'info de chemin suiveuses (par exemple '/login.php/') ne fonctionnerait pas.

Dans ce cas, la spécification Netscape peut être considérée comme erronée ou au moins trompeuse en prétendant que le chemin par défaut est le chemin du document en cours ... en fonction de la manière dont vous y lisez 'path'. Cependant, le comportement du navigateur est cohérent jusqu'à la version originale de Netscape. Netscape n'a jamais été si bon à des spécifications d'écriture ...

Si .NET de HttpWebRequest est vraiment en défaut CookieContainer.Path à tout le chemin du document en cours, je dépose un rapport de bogue. Malheureusement, le comportement réel n'est pas actuellement décrit dans un document de normes ... il y a RFC 2965, qui obtient le chemin juste, mais fait plusieurs autres changements non représentatifs du comportement réel du navigateur, donc ce n'est pas entièrement fiable non plus. :-(

0

C'est ainsi que fonctionnent les cookies. Les navigateurs Web appropriés »font exactement la même chose, comme initialement indiqué dans l'ancien Netscape doc les cookies: http://cgi.netscape.com/newsref/std/cookie_spec.html

applications Web doivent toujours efficacement définir un « chemin »(souvent «/»).

+0

Merci, bobince. Je vois, mais c'est un peu étrange pour moi, parce que ce site Web dont je parlais qui ne définit pas de "chemin", semble toujours fonctionner à travers tout le domaine dans Internet Explorer et Firefox au moins. Des idées? – James

1

On dirait que je ne peux pas aller plus loin avec le gestionnaire de cookies par défaut, donc je me suis énervé et je l'ai fait à la dure .. Haha Donc, l'analyse response.Headers ["Set-Cookie"] est ma solution Je ne suis pas mon préféré, mais cela fonctionne, et j'ai simplement éliminé le problème en divisant à la mauvaise virgule en utilisant des expressions régulières

Si je pouvais donner des points ici, je vous en donnerais quelques-uns, Bobince, parce que vous avez donné Je voudrais également voter si je pouvais (besoin d'un score plus élevé), mais puisque ce comportement est probablement un bug, comme vous l'avez mentionné, je vais accepter cela comme une réponse.

+0

Merci de repérer le bug et de le rendre googlable! :-) – bobince