HttpListenerResponse添加第二个cookie会使所有cookie消失

时间:2017-11-17 15:51:51

标签: c# cookies

我有以下代码:

    void WriteConnectionId(HttpListenerContext context, string id)
    {
        var cookie = context.Response.Cookies[CookieConnectionId];
        if (cookie == null)
        {
            cookie = new Cookie(CookieConnectionId, id)
            {
                HttpOnly = true,
                Secure = true,
                Path = "/"
            };
            context.Response.Cookies.Add(cookie);
        }
        else
        {
            cookie.Value = id;
        }
        //context.Response.SetCookie(new Cookie("lalala", "lololo"));
    }

此代码正确存储客户端中“连接ID”的cookie。在Chrome控制台中,我可以在Cookie列表中看到Cookie。

但是,如果我取消注释添加额外cookie的最后一行,那么会话cookie或虚拟cookie都不会进入客户端。它们不会出现在Chrome的控制台中。

编辑:删除第一个Cookie上的“/”路径会显示第一个Cookie,但第一个和第二个Cookie中的值都会以逗号连接。

2 个答案:

答案 0 :(得分:1)

尝试

context.Response.AppendCookie(new Cookie("lalala", "lololo"));

答案 1 :(得分:0)

我最后通过创建以下功能来修复此问题:

    void FlushCookie(HttpListenerContext context, Cookie cookie)
    {
        var builder = new StringBuilder();
        builder.Append(cookie.Name);
        builder.Append("=");
        builder.Append(HttpUtility.HtmlAttributeEncode(cookie.Value));
        builder.Append(";");
        context.Response.Headers.Add(HttpResponseHeader.SetCookie, builder.ToString());
    }

这可以进一步修改以添加cookie过期,路径等。