使用Javascript创建的Cookie在C#代码中不可访问..任何原因或其他选择

Cookie Created using Javascript , is not accessible in C# code....Any reason or other option?

本文关键字:任何原 访问 选择 其他 创建 Javascript Cookie 代码 使用      更新时间:2023-09-26

我正在使用cookie,我碰巧使用JavaScript创建了它,但当我试图在进程完成后使用C#代码隐藏文件使该cookie过期时,我找不到指定的cookie??

这可能是什么原因??我认为用JavaScript创建的cookie无法使用C#访问/可见。。。?这是真的吗??

这是我在JS 中创建cookie的代码

var expiryDate = new Date();
expiryDate.setTime(expiryDate.setDate(expiryDate.getDate() + 1)); // 365 days
document.cookie = "ReferedCookie=" + "clientId=" + UserGuid + "&productId=" + productId + "&Token=" + token + ";" + "expires=" + expiryDate.toGMTString() + ";";

这是我的C#代码,用于查找和过期cookie

public void DeleteCookie(string Name) 
{
    if (System.Web.HttpContext.Current.Request.Cookies["ReferedCookie"] != null)
    {
        HttpCookie myCookie = new HttpCookie(Name);
        myCookie.Expires = DateTime.Now.AddDays(-5d);
        System.Web.HttpContext.Current.Response.Cookies.Add(myCookie);
    }        
}

提前谢谢。

问题可能与cookie的Path属性有关。

使用Javascript设置cookie时,cookie的默认路径将基于设置cookie的页面的位置。

为了使cookie过期,您必须指定相同的路径。所以如果你有一个页面:

http://test.foo.com/somepath/default.asxp

如果您使用问题中的javascript代码在该页面上设置cookie,则cookie的默认路径为:

/somepath/

这意味着浏览器会将此cookie发送到该路径下的所有页面。它不会发送到该路径之外的页面。

要使服务器上的cookie过期,您需要指定cookie的路径:

HttpCookie myCookie = new HttpCookie(Name);   
myCookie.Expires = DateTime.Now.AddDays(-5d);   
myCookie.Path = "/somepath/";   
System.Web.HttpContext.Current.Response.Cookies.Add(myCookie);   

或者,您必须在最初将cookie设置为(例如)/:时指定路径

document.cookie = "ReferedCookie=" + "clientId=" + UserGuid + "&productId=" + productId + "&Token=" + token + ";" + "expires=" + expiryDate.toGMTString() + ";path=/";

然后在同一路径上使其过期。

使用一个函数来实现这一点很好,可以最大限度地减少出错的机会:

function set_cookie(name, value, expires, path, domain, secure)
{
  var cookie_string = name + "=" + escape ( value );
  if(expires)
  {
    cookie_string += "; expires=" + expires.toGMTString();
  }
  if(path)
        cookie_string += "; path=" + escape ( path );
  if(domain)
        cookie_string += "; domain=" + escape ( domain );
  if(secure)
        cookie_string += "; secure";
  document.cookie = cookie_string;
}

然后在你的情况下,这样称呼它:

var value = "clientId=" + UserGuid + "&productId=" + productId + "&Token=" + token;
var expiryDate = new Date();
expiryDate.setTime(expiryDate.setDate(expiryDate.getDate() + 1)); // 365 days
set_cookie("ReferedCookie", value, expiryDate);
DeleteCookie("ReferedCookie");

public void DeleteCookie(string Name) 
{
    if (System.Web.HttpContext.Current.Request.Cookies[Name] != null)
    {
        HttpCookie myCookie = new HttpCookie(Name);
        myCookie.Expires = DateTime.Now.AddDays(-5d);
        System.Web.HttpContext.Current.Response.Cookies.Add(myCookie);
    }        
}