HttpListenerResponse添加不需要的Set-Cookie头

本文关键字:Set-Cookie 不需要 添加 HttpListenerResponse | 更新日期: 2023-09-27 18:13:50

我试图用c#与HttpListener类一起工作,似乎它发送了一个不需要的Set-Cookie头,同时阻止我的cookie被发送。

HttpListenerContext context,请求正在以某种方式被处理,然后响应部分看起来像:

    if (responseHeaders != null)
        foreach (string header in responseHeaders.Keys)
            context.Response.Headers.Add(header, responseHeaders[header]);
    for (int i = 0; i < responseCookies.Count; i++)
    {
        context.Response.Headers.Add("Set-Cookie", responseCookies[i].ToHeaderString());
    }
oWrite(response, responseEncoding);
oClose();

和我的扩展方法,ToHeaderString():

    public static string ToHeaderString(this Cookie c)
    {
        string s = c.Name + "=" + c.Value;
        if (c.Path != null && c.Path != string.Empty)
        {
            s += "; path=" + c.Path;
        }
        if (c.Domain != null && c.Domain != string.Empty)
        {
            s += "; domain=" + c.Domain;
        }
        if (c.Expires != null)
        {
            s += "; expires=" + c.Expires.ToString("ddd, d MMM yyyy HH:mm:ss", new CultureInfo("en-US")) + " GMT";
        }
        return s;
    }

responseHeaders属于Dictionary<string, string>类型,responseCookies属于CookieCollection类型。它们都填充了要发送到客户端的报头和cookie。

Cookie userCookie = new Cookie("username", _GET["__username"], "/");
userCookie.Expires = DateTime.Now.AddDays(10);
_CONNECTION.responseCookies.Add(userCookie);
Cookie userSession = new Cookie("session", ses, "/");
userSession.Expires = DateTime.Now.AddDays(10);
_CONNECTION.responseCookies.Add(userCockie);
_CONNECTION.responseCookies.Add(userSession);

然而,我看到的回应是:

Date:Wed, 19 Oct 2016 11:33:21 GMT
Server:Microsoft-HTTPAPI/2.0
Set-Cookie:username=yotam180; Max-Age=863999; Path=/, session=XCDbRv0fqbUwWC9g9xXL; Max-Age=863999; Path=/
Transfer-Encoding:chunked

我在这里做错了什么?我没有正确使用HttpListenerResponse头吗?

谢谢!

编辑我也尝试过使用context.Response.Cookies.Add(..),但是也没有成功。这是正确的做法吗?或者有什么技巧可以在这里使用?

HttpListenerResponse添加不需要的Set-Cookie头

好了,我终于发现我错在哪里了。

在我给出的代码之前,有一个赋值,它应该是一个初始化。基本上,分配CookieCoolection A = context.Response.Cookies而不是CookieCollection A = new CookieCollection,使context.Response.Cookies的cookie被输入到集合中两次,我猜这就是导致问题的原因。