2010-08-17 3 views
2

Je gère les cookies en utilisant JavaScript pour stocker certaines valeurs dans mon application web asp.net. J'utilise document.cookie pour enregistrer certaines valeurs (converties en une chaîne longue). Mais je veux que cette valeur soit accessible sur toutes les pages de mon application.Les cookies sont-ils stockés en utilisant document.cookie spécifique à un document?

Lorsque j'essaie d'obtenir cette valeur à partir d'une page différente, j'obtiens les valeurs relatives au document dans l'URL actuelle.

En bref, je sauvegarde la valeur du cookie dans http://myapp/doc1.aspx et que vous voulez le récupérer dans http://myapp/doc2.aspx

Ainsi est document.cookie est portée appartenant à un seul document? Comment puis-je sauvegarder/lire les cookies sur le site?

Mise à jour

Voici comment je reçois et créer des cookies

function getCookie(c_name) 
{ 
try{ 
    if (document.cookie.length>0) 
    { 
    c_start=document.cookie.indexOf(c_name + "="); 
    if (c_start!=-1) 
    { 
    c_start=c_start + c_name.length+1; 
    c_end=document.cookie.indexOf(";",c_start); 
    if (c_end==-1) c_end=document.cookie.length; 
    return unescape(document.cookie.substring(c_start,c_end)); 
    } 
    } 
    } 
    catch(e) 
    {} 
return ""; 
} 

function setCookie (name, value, exp_d) 
{ 
    var cookie_string = name + "=" + escape (value); 

    if (exp_d) 
    { 
    var exdate=new Date(); 
    var expires = new Date (exdate.getYear(), exdate.getMonth(), exdate.getDay()+exp_d); 
    cookie_string += "; expires=" + expires.toGMTString(); 
    } 

    document.cookie = cookie_string; 
} 

Mais je reçois des valeurs différentes pour les cookies dans les différentes pages. Des idées?

Merci.

+0

Je ne vois rien de mal ici. Avez-vous essayé de créer un raccourci vers javascript: alert (document.cookie) pour l'inspecter à différents points, et en définissant des points d'arrêt dans firebug ou similaire pour s'assurer que vous ne l'écrivez pas avant de le configurer? –

+0

Oui, je fais exactement ce que vous avez dit. – NLV

Répondre

1

Les cookies s'appliquent à l'ensemble du nom de domaine. Les cookies créés avec le code que vous avez posté seront disponibles sur toute page hébergée sur votre nom de domaine.

+0

... sauf quand ils ne le font pas. –

+0

À peu près, oui. – Sam152

+0

J'ai mis à jour mon message. Veuillez le vérifier. – NLV

3

Les cookies ont un domaine et un chemin. Par défaut, le domaine sera le domaine à partir duquel il est défini et le chemin sera le chemin racine, mais ils peuvent être remplacés comme suit:

La ressource à http://www.example.net/foo/bar/baz définit un cookie (que ce soit du côté du serveur ou du côté client) javascript).

Par défaut, son domaine est www.example.net et son chemin est/sera visible à toutes les ressources dont l'URI correspond à : //www.example.net/ où * est un simple caractère générique.

Son domaine peut être défini sur exemple.net, mais ne peut pas être défini sur exemple.org - il ne peut être défini que sur un domaine dont il est un sous-domaine. (Il existe des règles spéciales et imparfaites pour vous empêcher de définir un cookie pour un tld comme .net)

Son chemin peut être défini sur/foo/bar/baz ou/foo/bar ou even/foo/ba as il est comparé à une simple correspondance de sous-chaîne. Si réglé sur par ex./foo/bar/alors il sera visible à une ressource à http://www.example.net/foo/bar/qux mais pas un à http://www.example.net/foo/quux/corge

Il y a aussi la propriété sécurisée, qui restreint le cookie au protocole HTTPS.


Edit: Voir http://www.quirksmode.org/js/cookies.html pour plus de détails sur la façon de réellement définir ces propriétés.

+0

path ne vaut pas par défaut ''/'', mais c'est une bonne valeur par défaut pour la plupart des gens. Par défaut, il s'agira du chemin des documents en cours. https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie – Duane

2

Le problème peut être résolu avec l'aide de la syntaxe ci-dessous

use ";path=/;" au dernier lors de l'enregistrement des cookies indiqué ci-dessous

document.cookie = c_name + "=" + oldInfo + ";path=/"; 
Questions connexes