3

我正在使用 cookie,我碰巧使用 JavaScript 创建它,但是当我在我的过程完成后尝试使该 cookie 过期时,使用 C# 代码隐藏文件,我无法找到指定的 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() + ";";

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

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

提前致谢。

4

3 回答 3

5

问题可能与Pathcookie 的属性有关。

使用 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=/";

然后在同一路径上过期。

于 2012-08-29T13:02:03.800 回答
0
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);
    }        
}
于 2012-08-29T11:23:29.733 回答
0

很高兴为此使用一个函数,以尽量减少出错的机会:

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);
于 2012-08-29T11:24:21.927 回答