【问题标题】:Unable to access cookie in HttpRequest无法访问 HttpRequest 中的 cookie
【发布时间】:2011-03-29 12:44:27
【问题描述】:

我正在尝试“获取”页面,并传入存储在我的 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时是否做错了什么?

【问题讨论】:

  • 在发送到服务器之前,您是否确保 cookie 位于可访问的域中?您可以使用 Firecookie 之类的工具来获取此信息。 addons.mozilla.org/en-US/firefox/addon/6683
  • 我不确定 ASP.NET 部分,但要让浏览器沿请求发送 cookie,其域 路径应与请求 URI 匹配。先把你的注意力集中在那个部分。
  • 设置 cookie 是 javascript 中的一个烦恼。由于您使用的是 jQuery,我建议您使用 cookie 插件:plugins.jquery.com/project/cookie
  • cookie 是可访问的。我用过 FireCookie,我可以看到我的 cookie 以及我期望的所有内容。

标签: jquery asp.net-mvc cookies


【解决方案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();

然后一切正常。

【讨论】:

    【解决方案2】:

    嗯。通过调用处理程序在服务器端创建 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.
    
              }  
    

    希望这会有所帮助。

    【讨论】:

    • 在控制器中提供给他的数据与在 .ashx 文件中提供的数据不一样吗?
    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 2021-05-12
    • 2021-07-24
    • 2016-10-20
    • 2017-10-09
    • 1970-01-01
    • 2018-11-14
    • 2023-03-17
    相关资源
    最近更新 更多