2010-08-13 89 views
2

我試圖做一個頁面的「獲取」,並傳入存儲在我的cookie中的id列表。我的假設是,可以從我的請求中獲取該列表中的cookie。但是,我沒有像我期望的那樣在服務器端獲取cookie。我只收到一個「用戶」cookie,但不包含我的信息。無法在HttpRequest中訪問cookie

我想盡量避免在URL中實際傳遞這些值,因爲我試圖儘可能保持乾淨和漂亮的URL。但是,如果以其他方式無法實現,那麼我仍然可以做到。

添加餅乾:

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(); 
} 

獲取新的一頁的jQuery:

document.location.href = href; 

在我的操作方法:

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

不應該一個cookie添加,還可以在請求中訪問嗎?

編輯:

當我現在已經用螢火和FireCookie,我可以看到,cookie不會與請求通過。所以問題是如果我在添加cookie時做錯了什麼?

+0

在發送到服務器之前,您是否確定cookie位於可訪問的域中?你可以使用像Firecookie這樣的工具來獲取這些信息。 https://addons.mozilla.org/en-US/firefox/addon/6683/ – 2010-08-13 15:02:39

+0

我不確定關於ASP.NET的一部分,但爲了讓瀏覽器沿請求發送cookie,它的域**和**路徑應該匹配請求URI。首先集中你的那一部分。 – BalusC 2010-08-13 15:03:14

+2

設置cookie是一個煩人的JavaScript。由於您使用的是jQuery,我建議使用cookie插件:http://plugins.jquery.com/project/cookie。 – 2010-08-13 15:06:25

回答

1

我無法訪問cookie的原因是因爲cookie路徑。當我查看FireCookie時,路徑是唯一與請求中可訪問的cookie不匹配的東西。

,這是訪問的一個一直在尋找這樣的:

Path: "/" 

和一個我想訪問,但無法,一直在尋找這樣的:

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

所以,當我現在正在儲存我的曲奇,我將它改爲:

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

要代之以:

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

然後它就可以正常工作了。

0

嗯。通過調用處理程序在服務器端創建cookie怎麼樣?

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

並且在您的javascript方法中,您可以使用XmlHttpRequest對象或JSON調用來調用您的Cookie處理程序。

  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. 

      } 

希望這會有所幫助。

+0

在控制器中提供的數據是否與在.ashx文件中提供的數據不同? – DaveDev 2010-08-13 19:18:03