Как удалить старые файлы cookie после перехода на ручной ключ компьютера и файлы с подстановочными знаками ASP.NET MVC 4.5

Как удалить файлы cookie в ASP.NET после смены ключа компьютера, но остаться в том же поддомене?

В настоящее время у нас есть файлы cookie на example.domain.com, но нам нужно перейти на файлы cookie с подстановочными знаками (.domain.com), чтобы файлы cookie также работали на foo.domain.com. Для этого мы вручную установили машинный ключ для шифрования/дешифрования файла cookie входа asp.net. Проблема в том, что люди, у которых уже есть старый файл cookie, теперь будут получать CryptographicException при попытке доступа к сайту (поскольку он по какой-то причине пытается расшифровать старый файл cookie). Мы поменяли имя куки, но это не помогло - все равно выдает ошибку. Итак, мы поняли, что хотим удалить все старые файлы cookie. Мы пытаемся сделать это на сайте входа со следующим кодом:

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    cookie.Domain = "example.domain.com"
    Response.Cookies.Add(cookie);
}

Мы достигаем кода, и он запускается, но файлы cookie все еще остаются при проверке ресурсов Google Chrome. Так что, очевидно, удаление не сработало. Мы пробовали несколько разных способов (добавляя путь = "/", устанавливая cookie.Value в cookie.Value и т. д. По какой-то странной причине файлы cookie все еще остаются, и мы не можем их удалить.

Итак, чтобы вернуться к исходному вопросу, как мы удаляем файлы cookie в ASP.NET MVC 4.5 после изменения домена с подстановочными знаками в наших файлах cookie и явного указания ключа машины в файле web.config?


person Sindre    schedule 07.07.2015    source источник


Ответы (2)


Если вам не обязательно обязательно использовать одно и то же имя билета, ваше решение должно работать, если вы изменили имя файла cookie FormsAuthentication:

<forms name=".YOUR_NEW_COOKIE_NAME" /> **

** Обратите внимание, что я пропустил другие атрибуты показанного тега, поэтому вы не захотите копировать/вставлять его дословно.

person Tieson T.    schedule 07.07.2015
comment
Спасибо за быстрый ответ. Мы не используем FormsAuthentication как таковой. Форма постит запрос с ajax, после чего пользователь авторизуется. Мы проверяем авторизацию для множества разных эндпоинтов, а также используем antiforgerytoken, поэтому их все равно нужно удалить, чтобы не получить ошибку расшифровки с неправильным машинным ключом. Кроме того, мне все еще очень любопытно, почему мы не можем удалить файлы cookie. Есть идеи по этому поводу? - person Sindre; 07.07.2015

Оказывается, удалив cookie.Domain, ему удалось удалить файлы cookie. Я полагаю, что это связано с тем фактом, что для перезаписи файла cookie необходимо быть как можно точнее при добавлении замещающих файлов cookie. Учитывая, что предыдущие файлы cookie были добавлены без указания домена или пути, этот файл является наиболее конкретным.

Поэтому код, который работал в этом сценарии, был таким:

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(cookie);
}
person Sindre    schedule 07.07.2015
comment
@The_Black_Smurf Хотя это и не самый лучший из ответов, Синдре является другим, так что... - person Tieson T.; 08.07.2015
comment
Моя ошибка... Я пропустил эту информацию. - person The_Black_Smurf; 08.07.2015
comment
@Sindre Можете изменить свой ответ, включив в него то, что вы сделали, что действительно сработало? Я могу увидеть ваш голос в будущем, если вы это сделаете ... - person Tieson T.; 08.07.2015
comment
@ТисонТ. Конечно! - person Sindre; 09.07.2015