| Формат и синтаксис Cookie |
СпецификацияПолное описание поля Set-Cookie HTTP заголовка: Минимальное описание поля Set-Cookie HTTP заголовка: NAME=VALUE - строка символов, исключая перевод строки, запятые и пробелы. NAME-имя cookie, VALUE - значение. expires=DATE - время хранения cookie, т.е. вместо DATE должна стоять дата в формате Wdy, DD-Mon-YYYY HH:MM:SS GMT, после которой истекает время хранения cookie. Если этот атрибут не указан, то cookie хранится в течение одного сеанса, до закрытия броузера. domain=DOMAIN_NAME - домен, для которого значение cookie действительно. Например, domain=realcoding.net. В этом случае значение cookie будет действительно и для сервера realcoding.net, и для www.realcoding.net. Но не радуйтесь, указания двух последних периодов доменных имен хватает только для доменов иерархии "COM", "EDU", "NET", "ORG", "GOV", "MIL", и "INT". Для доменов иерархии "RU" придется указывать три периода. Если этот атрибут опущен, то по умолчанию используется доменное имя сервера, с которого было выставлено значение cookie. path=PATH - этот атрибут устанавливает подмножество документов, для которых действительно значание cookie. Например, указание path=/win приведет к тому, что значение cookie будет действительно для множества документов в директории /win/, в директории /wings/ и файлов в текущей директории с именами типа wind.html и windows.shtml Если этот атрибут не указан, то значение cookie распространяется только на документы в той же директории, что и документ, в котором было установлено cookie. secure - если стоит такой маркер, то информация cookie пересылается только через HTTPS (HTTP с использованием SSL). Если этот маркер не указан, то информация пересылается обычным способом. Синтаксис HTTP заголовка для поля Cookie Когда запрашивается документ с HTTP сервера, броузер проверяет свои cookie на предмет соответствия домену сервера и прочей информации. В случае, если найдены удовлетворяющие всем условиям значения cookie броузер посылает их в серверу в виде пары имя/значение: Дополнительные сведенияВ случае, если cookie принимает новое значение при имеющемся уже в броузере cookie с совпадающими NAME, domain и path, старое значение затирается новым. В остальных случаях новые cookies добавляются. Использование expires не гарантирует сохранность cookie в течение заданного периода времени, поскольку клиент (броузер) может удалить запись вследствие нехватки выделенного места или каких-либо других лимитов. Клиент (броузер) имеет следующие ограничения: * всего может храниться до 300 значений cookies * каждый cookie не может превышать 4Кбайт * с одного сервера или домена может храниться до 20 значений cookie Если ограничение 300 или 20 превышается, то удаляется первая по времени запись. При превышении 4К - корректность такого cookie страдает - отрезается кусок записи (с начала этой записи) равный превышению. В случае кэширования документов, например, proxy-сервером, поле Set-cookie HTTP заголовка никогда не кэшируется. Если proxy-сервер принимает ответ, содержащий поле Set-cookie в заголовке, предполагается, что поле таки доходит до клиента вне зависимости от статуса 304 (Not Modified) или 200 (OK). Соответственно, если клиентский запрос содержит в заголовке Cookie, то он должен дойти до сервера, даже если установлен If-modified-since. Я полагаю, что все что сказано про proxy не относится к случаю, когда cookie устанавливается жестко с помощью META-тагов. Примеры Ниже приведено несколько примеров, иллюстрирующих использование cookies Первый пример: Клиент запрашивает документ и принимает ответ: Когда клиент запрашивает URL с путем "/" на этом сервере, он посылает: Клиент запрашивает документ и принимает ответ: Когда клиент запрашивает URL с путем "/" на этом сервере, он посылает: Клиент получает: Когда клиент запрашивает URL с путем "/" на этом сервере, он посылает: Когда клиент запрашивает URL с путем "/foo" на этом сервере, он посылает: Второй пример: Клиент принимает: Когда клиент запрашивает URL с путем "/" на этом сервере, он посылает: Клиент принимает: Когда клиент запрашивает URL с путем "/ammo" на этом сервере, он посылает: Комментарий: здесь мы имеем две пары имя/значение с именем "PART_NUMBER". Это наследие из предыдущего примера, где значение для пути "/" прибавилось к значению для "/ammo". |
