Созданный cookie в коде, удаленный cookie из браузера, страница все еще может прочитать удаленный cookie.Как? - PullRequest
2 голосов
/ 12 июня 2011

У меня есть следующий код C #, который регистрирует URL пользователя в файле cookie.Если файл cookie уже существует, он добавляет новое значение к существующему значению, разделенному символом канала.Моя страница ASPX ищет этот файл cookie, сортирует значения на основе символа канала и связывает их с сеткой.Все идет нормально.Но когда я захожу в Свойства обозревателя в своем браузере и очищаю свои куки, временные файлы и т. Д. И обновляю страницу, страница все равно может прочитать значения из куки.Похоже, что куки не были удалены в конце концов.Это сохраняется независимо от того, как.Что дает?Если пользователь удаляет куки из своего браузера, элемент управления сеткой в ​​моем ASPX должен быть пустым.Страница не использует кеширование или что-либо еще.

HttpCookie recentlyViewedCookie = Request.Cookies["RecentlyViewedCookie"];
        if (recentlyViewedCookie != null)
        {
            string value = recentlyViewedCookie.Value;
            value = string.Format("{0}|{1}*{2}", value, DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
            recentlyViewedCookie.Value = value;
            Response.Cookies.Add(recentlyViewedCookie);
        }
        else
        {
            recentlyViewedCookie = new HttpCookie("RecentlyViewedCookie");
            recentlyViewedCookie.Value = string.Format("{0}*{1}", DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
            recentlyViewedCookie.Expires = DateTime.Now.AddMonths(1);
            Response.Cookies.Add(recentlyViewedCookie);
        }

Спасибо за любые ответы.

Ответы [ 2 ]

2 голосов
/ 15 октября 2013

Проблема в следующем блоке кода:

    if (recentlyViewedCookie != null)
    {
        string value = recentlyViewedCookie.Value;
        value = string.Format("{0}|{1}*{2}", value, DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
        recentlyViewedCookie.Value = value;
        Response.Cookies.Add(recentlyViewedCookie);
    }

Вы не установили дату истечения срока действия cookie.Если файл cookie не имеет срока годности, он является «сеансовым файлом cookie» и хранится в памяти до тех пор, пока браузер не закроется - он никогда не будет записан на диск - поэтому удаление всех файлов cookie с диска не повлияет на него.

Вы можете подумать, что срок годности от первоначального создания файла cookie сохранится, но это не так.Сервер не имеет доступа к исходному файлу cookie и не знает, на что установлен срок действия.Поэтому он просто записывает заголовок set-cookie без какой-либо даты окончания срока действия, превращая cookie в cookie сеанса.

1 голос
/ 12 июня 2011

Прежде всего НЕ является хорошей практикой просить пользователя удалить все файлы cookie , чтобы ваша страница работала правильно.

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

В конце я предлагаю подумать о другом методе действий потока страниц и НЕ просить пользователяочистить все куки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...