2010-08-13 103 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