2016-10-19 3 views
0

Я пытаюсь работать с классом HttpListener с C#, и кажется, что он отправляет нежелательный заголовок Set-Cookie, не допуская отправки файлов cookie.HttpListenerResponse добавление нежелательного заголовка Set-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 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 (..), но также и без успеха. Это правильный способ сделать это? Или есть какой-нибудь трюк, который можно использовать здесь?

ответ

0

Ну, в конце концов я нашел там, где я ошибся.

Было задание перед кодом, который я дал, который должен был быть инициализацией. В принципе, присваивая CookieCoolection A = context.Response.Cookies вместо CookieCollection A = new CookieCollection, сделанные cookie context.Response.Cookies будут внесены в коллекцию дважды, и я предполагаю, что это вызвало проблему.