2010-08-13 4 views
2

J'essaie de faire un "get" d'une page, et transmettre une liste d'ID qui est stockée dans mon cookie. Mon hypothèse était qu'il serait possible d'obtenir le cookie avec la liste de ma demande. Cependant, je n'obtiens pas le cookie du côté du serveur comme je m'attendrais. Je reçois seulement un cookie "utilisateur", mais cela ne contient pas mes informations.Impossible d'accéder à cookie dans HttpRequest

Je veux essayer d'éviter de transmettre ces valeurs dans l'URL, car j'essaie de garder des URL aussi propres et agréables que possible. Cependant, si ce n'est pas possible d'une autre manière, alors je peux encore le faire.

Ajout du cookie:

function setCookie(name, value) { 
    var today = new Date(); 
    today.setTime(today.getTime()); 
    var expires = 30 * 1000 * 60; 

    var c_name = name; 
    var exdate = new Date(today.getTime() + (expires)); 
    document.cookie = c_name + "=" + value + ";expires=" + exdate.toGMTString(); 
} 

Obtenir la nouvelle page dans jQuery:

document.location.href = href; 

Dans ma méthode d'action:

if (Request.Cookies != null) 
{ 
    var myCookie = Request.Cookies[cookieName]; 
} 
//myCookie is always null 

Si pas un cookie-je ajouter, toujours être accessible dans la demande?

Edit:

Quand je suis maintenant utilisé Firebug et Firecookie, je peux voir que le cookie ne sont pas transmises à la demande. Donc la question est de savoir si je fais quelque chose de mal en ajoutant le cookie?

+0

Avez-vous vérifié que le cookie se trouve dans un domaine accessible avant d'être envoyé au serveur? Vous pouvez utiliser un outil comme Firecookie pour obtenir cette information. https://addons.mozilla.org/en-US/firefox/addon/6683/ –

+0

Je ne suis pas sûr de la partie ASP.NET, mais pour que le navigateur envoie le cookie le long de la requête, son domaine ** et ** chemin doit correspondre à l'URI de la requête. Concentrez-vous sur cette partie en premier. – BalusC

+2

La définition de cookies est un désagrément en javascript. Puisque vous utilisez jQuery, je recommande le plugin cookie: http://plugins.jquery.com/project/cookie. –

Répondre

1

La raison pour laquelle je n'ai pas pu accéder au cookie était à cause du chemin du cookie. Quand je regardais FireCookie, le chemin était la seule chose qui ne correspondait pas au cookie qui était accessible dans la requête.

Celui qui était accessible ressemblait à ceci:

Path: "/" 

et celui que je voulais l'accès, mais il était incapable, ressemblait à ceci:

Path: "/{projectName}/{controller}/{action}" 

Alors, quand je « m sauver maintenant mon biscuit, je l'ai changé d'être ceci:

document.cookie = c_name + "=" + value + ";expires=" + exdate.toGMTString(); 

Pour être ceci:

document.cookie = c_name + "=" + value + ";Path=/;expires=" + exdate.toGMTString(); 

Et tout se passe bien alors.

0

Hmmm. Qu'en est-il de la création du cookie côté serveur en appelant un gestionnaire?

// on CookieHandler.ashx 
HttpCookie myCookie = new HttpCookie("Your Data"); 
Response.Cookies.Add(myCookie); 

et dans votre méthode javascript vous pouvez appeler votre gestionnaire de cookies en utilisant l'objet XMLHttpRequest ou appel JSON.

  function setCookie(name, value){ 
     var cookieQuery= 'AppCode/cookieHandler.ashx?name='+name+'&value='+value; 
      var xmlhttp; 
      if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp = new XMLHttpRequest(); 
      } 
      else 
      if (window.ActiveXObject) { 
      // code for IE6, IE5 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      else { 
       alert("Your browser does not support XMLHTTP!"); 
      } 
      xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == 4) { 
        // Do Something 
        //alert(xmlhttp.responseText); 
       } 
      } 

      xmlhttp.open("GET", cookieQuery, true); 
      xmlhttp.send(null); // Sends the request to the server. 

      } 

Espérons que cela aide.

+0

ne serait pas les mêmes données disponibles dans le contrôleur comme serait disponible dans le fichier .ashx? – DaveDev