2010-07-24 4 views
4

J'utilise Firefox 3.6.8 pour ces tests.Comportement d'en-tête de cookie vraiment bizarre? - Cookies

Je suis un cookie dans les en-têtes de réponse de mon application web utilisant:

Set-Cookie: session=7878dfdsfjsdf89sd89f8df9 

Ce ne semble pas passer outre le cookie de session.


Lorsqu'une requête est exécutée à la place Firefox envoie même les cookies en double:

Cookie: session=7d75cd8f55895cbccb0d31ee07c7afc0; 
     session=671e8448a5cebda0442005a186cf69a3; 
     4cb6f2d75c9ffc8916cb55bcbaafecd8 

ce qui se passe ?? Toutes les idées seraient géniales !! =)


Ceci est tout à fait désastreuse dans mon cas ... si quelqu'un pourrait expliquer ce qui se passe ce serait vraiment me aider!

Répondre

5

Si vous ne spécifiez pas le chemin d'accès ou d'un domaine pour un cookie lors de sa mise, la valeur par défaut de la chemin actuel et nom d'hôte actuel. Si vous poursuivez et essayez de définir le même nom de cookie à partir d'une URL avec un chemin d'accès ou un nom d'hôte différent, un nouveau cookie sera ajouté au lieu de remplacer l'ancien.

Je soupçonne que ce que vous voulez faire est juste de définir un cookie avec un chemin global pour votre site et pour l'ensemble de votre domaine. Donc, quelque chose comme ça:

Set-Cookie: session=7878dfdsfjsdf89sd89f8df9; path=/; domain=.mysite.com 
+0

Je pense que vous avez résolu mon problème ... Je devenais littéralement folle = D – RadiantHex

+0

Puis-je définir le Cookie pour couvrir tous les chemins? – RadiantHex

+0

Je t'aime !!!!!! : 3 – RadiantHex

3

Vous pouvez supprimer le cookie précédent à l'aide de l'objet response.

response.delete_cookie(cookie_key) 

L'ensemble des cookies est disponible via l'objet request dans le dictionnaire request.COOKIES, et vous pouvez obtenir la clé à partir de là.

Puisque vous utilisez Django, voici comment vous pourriez faire dans la fonction de vue:

def my_view(request): 
    # do some work and create a response object 
    response = HttpResponse(some_content) 

    # first delete any previously set cookie named "session" 
    if 'session' in request.COOKIES: 
     response.delete_cookie('session') 

    # set the new cookie 
    response.set_cookie('session', <cookie value goes here>') 
    return response 
+0

merci, comment puis-je obtenir un serveur http pour remplacer le cookie? Je n'aurai aucun contrôle sur la machine de l'utilisateur lorsqu'une application Web sera mise en ligne. – RadiantHex

+0

btw J'envoie le 'Set-Cookie' manuellement via Django, mais Firefox ne remplacera pas les anciens cookies, peu importe ce que ... – RadiantHex

+0

Cela rendra mes cheveux gris avant le temps =) – RadiantHex