2016-05-03 3 views
0

У нас есть веб-сервис, в который пользователи могут входить и выходить. Куки-файл используется для определения того, подписан ли пользователь или нет.Как правильно заканчивать cookie?

Служба предоставляет несколько «сайтов», каждая из которых идентифицируется субдоменом. Например:

  • http://customer1.ourservice.com/
  • http://customer2.ourservice.com/

Есть два способа подписать в; либо «широкий сервис», либо «конкретный сайт».

«Сервис широкий» входные запросы отправляются на специальный субдомен (http://globalauth.ourservice.com/). Такой знак в запросах приводит к Set-Cookie заголовок вроде следующего:

Set-Cookie: OUR-COOKIE=<<cookie-value>>; 
      expires=Wed, 03 May 2017 11:25:58 GMT; 
      domain=.ourservice.com; 
      path=/; 
      httponly 

(Разрывы строк добавлены здесь, чтобы сделать его легче читать)

Установка domain=.ourservice.com делает печенье доступны для всех поддоменов.

Подписанные запросы на конкретный сайт отправляются на конкретный субдомен сайта. Они приводят к Set-Cookie заголовок вроде следующего:

Set-Cookie: OUR-COOKIE=<<cookie-value>>; 
      expires=Wed, 03 May 2017 11:23:42 GMT; 
      path=/; 
      httponly 

Выход из системы запросы всегда отправляются на сайт определенного субдомена и должны удалить куки для обоих «широкой стороне» знак в и «сайт специфический» знак в.

вывеска из запроса результат в Set-Cookie заголовок вроде следующего:

Set-Cookie: OUR-COOKIE=; 
      expires=Mon, 02 May 2016 11:26:54 GMT; 
      path=/; 
      httponly, 
      OUR-COOKIE=; 
      expires=Mon, 02 May 2016 11:26:54 GMT; 
      domain=.ourservice.com; 
      path=/; 
      httponly 

идея заключается в том, что оба сайта специфичны и обслуживание широкий куки должны быть очищены и истек.

Он работает, когда был использован знак «служебный широкий», но не работает, когда был использован «конкретный сайт».

Конкретный файл cookie для сайта просто не удаляется из браузера.

Как мы должным образом поручаем браузеру истекать/удалять файлы cookie независимо от того, был ли он выпущен с настройкой domain или нет?

ответ

0

Оказалось, что это связано с ошибкой WCF в .NET framework 4.0 и 4.5.

Спецификация, RFC 6265, не допускает передачу нескольких куки-файлов, разделенных запятой, в один заголовок Set-Cookie. Вместо этого следует использовать несколько заголовков Set-Cookie (по одному для каждого файла cookie).

Мы используем HttpResponseHeadersExtensions.AddCookies, чтобы добавить cookies. В документации по этому методу ясно говорит:

Каждый заголовок Set-Cookie представлен в виде один CookieHeaderValue экземпляра.

Однако, оказывается, что множественные экземпляры CookieHeaderValue действительно объединены в одну, разделенные запятой, Set-Cookie заголовка –, которая не поддерживается спецификацией.

См следующие соответствующие должности на StackOverflow:

Цитата из последнего поста:

Тот факт, что "Set-Cookie" помещается в одну строку cookie, регистрируется как ошибка в Microsoft для .NET Framewo rk 4.0, а также Framework 4.5. В группе разработчиков Microsoft WCF ошибка указана как «закрытая» и «не будет исправлена».

Согласно Microsoft, единственным обходным решением является переход от самостоятельного размещения к хостингу в IIS, а затем непосредственно с помощью объекта (IIS) Response (другой путь кода, который не имеет ошибки).

Это плохая новость для нас, так как мы в настоящее время привязаны к использованию кода с кодом хозяина. Нам нужно найти способ обойти эту ошибку.

Смежные вопросы