我应该给这个cookie什么域名?

时间:2010-10-12 15:50:50

标签: c# .net cookies

我正在尝试使用sessionID从c#应用程序调用Web服务 为此,我需要在cookie中设置“Domain”标头。

在Fiddler中它看起来像 - “ASP.NET_SessionId = izdtd4tbzczsa3nlt5ujrbf5”(cookie中没有指定域)。

Web服务位于 - “http:// [some ip goes here]:8989 / MyAPI.asmx”。

我试过了:
http:// [ip],
http:// [ip]:8989,
http:// [ip]:8989 / MyAPI.asmx

所有这些都会导致运行时错误。

我还尝试了单独的ip (即100.10.10.10),这不会导致运行时错误,并设置cookie,但是当我调用web时,cookie永远不会被发送方法。

以下是我设置域名的代码:

if (!string.IsNullOrEmpty(currentSessionID))
{
   req.CookieContainer=new CookieContainer();
   Cookie cookie = new Cookie("ASP.NET_SessionId", currentSessionID);
   cookie.Domain = GetCookieUrl();  //<- What should this be?
   req.CookieContainer.Add(cookie);
}

那么域应该是什么?

感谢。

3 个答案:

答案 0 :(得分:1)

我相信它应该只是[ip]。删除http://您尝试过的部分。

根据MSDN上的this page,您的代码应为

cookie.Domain = "100.10.10.10";

接下来,你到底发生了什么错误?另外,您是否将Compile错误与运行时错误混淆?我发现很难相信你得到一个编译错误,因为Domain是一个String属性,这意味着你可以在其中放入任何东西。

最后,为什么要向网络服务发送cookie?通常的方法是传递表单post或查询字符串中的所有内容。


<强>更新

顺便说一句,如果你绝对必须在标题中添加一个cookie以便将它传递给一个Web服务,你这样做的方式是(取自here):

byte[] buffer = Encoding.ASCII.GetBytes("fareId=123456"); //the data you want to send to the web service
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
WebReq.Headers["Cookie"] = "ASP.NET_SessionId=izdtd4tbzczsa3nlt5ujrbf5"

Stream PostData = WebReq.GetRequestStream();

请注意,这会将标头与请求内联设置,而不会实例化“cookie”对象。 Cookie的Domain属性有助于确保cookie仅发送到列出的域。但是,如果您正在启动请求并尝试向其附加cookie,那么最好的方法是将其作为字符串添加到请求标头中。

答案 1 :(得分:0)

未发送Cookie的原因是请求的内容长度应在添加Cookie后设置,而不是之前。
域名是ip。

答案 2 :(得分:0)

// Simple function to get cookie domain
private string GetCookieDomain(string uri)
{
    Uri req_uri = new Uri(uri);
    return req_uri.GetComponents(UriComponents.Host, UriFormat.Unescaped);
}