2016-03-11 6 views
0

Я знаком с «лучшими практиками» Microsoft для обработки жизненного цикла файла cookie (как определено в MSDN) и следую за ними, но нашел нечетный сценарий, который мне нужно исправить. Я не могу себе представить, что я первый, кто испытал это, поэтому хотел посмотреть, что такое сообщество взяло на себя.Изменение файла cookie не влияет на него до следующего запроса - как это исправить?

Кстати, одно очевидное исправление для того, что я собираюсь описать, было бы заставить перенаправить, но по причинам, в которые я не буду входить, 302 не является вариантом.

Хорошо, поэтому я получаю WebRequest и в этом у меня есть определенный файл cookie. В зависимости от потока мне нужно «удалить» этот файл cookie. Чтобы сделать это, я установил значение Response Cookie равным null и установил дату его истечения в прошлом году.

Однако в дальнейшем очень отдельная часть кода пытается перечитать файл cookie и - угадать, что - он находит старое значение. Примечание: это все еще является частью САМОГО веб-запроса, мы еще не вернулись к клиенту.

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

Одно из решений, которое у меня есть, заключается в том, что в самом начале веб-запроса я копирую файлы cookie запроса в отдельную ячейку NameValueCollection.

  • Каждый раз, когда я обновляю значение cookie, я обновляю как файл cookie в коллекции Response.Cookies, так и обновляю значение в отдельном NameValueCollection.
  • Everytime I удалить кук, я истекаю печенье в коллекции Response.Cookies, и я удалить его из NameValueCollection
  • Каждый раз, когда я добавить новое печенье, я добавляю его как коллекции Response.Cookies и мои NameValueCollection.
  • Всякий раз, когда я хочу прочитать значение файла cookie, я прочитал его с моего NameValueCollection.

Мысли?

Благодаря

Griff

+0

Ожидаемое поведение. Поскольку веб-запрос все еще обрабатывается, а элемент управления не возвращается обратно, клиентский файл cookie не будет удален до следующего запроса. Кроме того, если вы проверяете свойство HttpRequest.Cookies на его readonly, это означает, что после получения запроса вы не можете изменить эту коллекцию, но то, что может быть изменено, - это Response.Cookies и те модифицированные файлы cookie будут входить в игру при следующем запуске запроса. –

+0

Привет Панкай - спасибо за ответ. Итак, основываясь на том, что мне нужно с этим справиться, есть ли предпочтительный способ сделать это (кроме решения, о котором я упоминал)? – DrGriff

+0

Поскольку я не знаю точного сценария и как его реализовать, я, возможно, не смогу подробно судить о предлагаемом решении, но на уровне поверхности он выглядит хорошо. –

ответ

0

Я сначала проверить, если Resonse.Cookies.AnyKeys содержит мое имя Cookie. Если да, то я читаю файлы cookie Response. Если это не так, я прочитал из файлов cookie Request.