Можно перечислить только через первые 20 или около того куки, прежде чем я получу исключение - PullRequest
1 голос
/ 06 апреля 2009


Следующий код создает 100 файлов cookie, а затем перечисляет их через постбэки.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        for (int i = 0; i < 100; i++)
        {
            HttpCookie cookie = new HttpCookie("cookie num." + i.ToString());
            cookie["Cookie"] = i.ToString() + "th cookie, anyone?";
            cookie.Expires = DateTime.Now.AddMonths(1);
            Response.Cookies.Add(cookie);
        }

        int i1 = 0;
        Session["i"] = i1;
    }

    if (IsPostBack)
    {
        int i = (int)Session["i"];
        HttpCookie cookie= Request.Cookies["Cookie num." + i.ToString()];
        Label1.Text = cookie["Cookie"];
        Session["i"] = ++i;
    }
 }


В1 - Но при использовании Firefox, вместо того, чтобы перечислять все 100 файлов cookie, приложению удается только пройти первые 20 (макс. 40) файлов cookie перед отчетом. Ссылка на объект не установлена ​​на экземпляр объекта Исключение:


Q2 - когда я запрашиваю эту страницу через IE, я всегда получаю Ссылка на объект не установлена ​​на экземпляр объекта исключение (Кстати, я проверил, и IE удалось сохранить все 100 файлов cookie в один файл) при первой обратной передаче.


1020 * спасибо *


EDIT:

Но следующая ссылка применима к IE, а Firefox не сохраняет все файлы cookie. И с IE, код не может перечислить ни один из файлов cookie. Поэтому приведенный выше ответ был бы действительным, если бы я хотя бы смог перечислить первые 20 файлов cookie (в IE), которые я не


2. РЕДАКТИРОВАТЬ:

Спецификация не дает никаких гарантий относительно того, какие куки должен хранить браузер, когда у него заканчивается хранилище, поэтому браузеры могут вести себя так, как им нравится, и вам следует ожидать различного поведения. Более того, в вашем примере все файлы cookie установлены в заголовках одного ответа. Заголовки HTTP не упорядочены, поэтому нет гарантии, что они будут обработаны в любом конкретном порядке.

Что именно вы подразумеваете под "обработанным"?

Спасибо за помощь

Ответы [ 2 ]

12 голосов
/ 06 апреля 2009

Вы не можете полагаться на возможность установки более 20 файлов cookie для одного имени хоста.

ETA:

Но следующая ссылка относится к IE, хотя Firefox не сохраняет все файлы cookie.

Да, но статья цитирует RFC2109, который также относится к Firefox.

Что касается , когда вы получите ошибку, это будет зависеть от того, какие куки браузер решит сохранить. Если он установит первые 20 файлов cookie, вы получите ошибку на cookie20; если он выбрасывает более ранние файлы cookie, чтобы освободить место для новых, у вас останется только cookie80-cookie99, и попытка доступа к cookie0 приведет к ошибке.

Спецификация не дает никаких гарантий относительно того, какие куки должен хранить браузер, когда у него заканчивается хранилище, поэтому браузеры могут вести себя так, как им нравится, и вам следует ожидать другого поведения. Более того, в вашем примере все файлы cookie установлены в заголовках одного ответа. Заголовки HTTP не упорядочены, поэтому нет гарантии, что они будут обработаны в любом конкретном порядке.

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

0 голосов
/ 15 февраля 2014

Может быть несколько причин, по которым Internet Explorer отклоняет ваши куки (например, настройки безопасности и т. Д.)

Кроме того, все браузеры имеют ограничение на количество принимаемых ими файлов cookie (от 20 до 50), а также ограничена общая длина строки cookie (например, 10 КБ).

Таким образом, не будет возможности установить 100 файлов cookie ни в одном из браузеров.

Здесь вы найдете очень подробные ответы на все эти вопросы от одного из программистов Internet Explorer: http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

...