无法在Http请求中访问cookie

时间:2010-08-13 14:58:27

标签: jquery asp.net-mvc cookies

我正在尝试对网页进行“获取”,并传入存储在我的Cookie中的ID列表。我的假设是可以从我的请求中获取带有列表的cookie。但是,我没有像我期望的那样在服务器端获得cookie。我只获得一个“用户”cookie,但不包含我的信息。

我想尽量避免在URL中实际传递这些值,因为我试图保持尽可能干净和漂亮的URL。但是,如果以任何其他方式无法实现,那么我仍然可以做到。

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

在jQuery中获取新页面:

document.location.href = href;

在我的行动方法中:

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

我添加的cookie不应该仍然可以在请求中访问吗?

编辑:

当我现在使用FireBug和FireCookie时,我可以看到cookie没有随请求传递。所以问题是我在添加cookie时是否做错了什么?

2 个答案:

答案 0 :(得分:1)

我无法访问cookie的原因是因为cookie路径。当我通过FireCookie查看时,路径是唯一与请求中可访问的cookie不匹配的东西。

可访问的那个看起来像这样:

Path: "/"

和我想要访问但却无法访问的那个,看起来像这样:

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

所以,当我现在保存我的cookie时,我将其改为:

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

改为:

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

然后一切顺利。

答案 1 :(得分: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.

          }  

希望这会有所帮助。