Спецификация Полное описание поля set-cookie http заголовка: set-cookie: name=value; expires=date; path=path; domain=domain_name; secure Минимальное описание поля set-cookie http заголовка: set-cookie: name=value; name=value - строка символов, исключая перевод строки, запятые и пробелы. name-имя cookie, value - значение. expires=date - время хранения cookie, т.е. вместо date должна стоять дата в формате wdy, dd-mon-yyyy hh:mm:ss gmt, после которой истекает время хранения cookie. Если этот атрибут не указан, то cookie хранится в течение одного сеанса, до закрытия броузера. domain=domain_name - домен, для которого значение cookie действительно. Например, domain=cit-forum.com. В этом случае значение cookie будет действительно и для сервера cit-forum.com, и для www.cit-forum.com. Но не радуйтесь, указания двух последних периодов доменных имен хватает только для доменов иерархии "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: name1=opaque_string1; name2=opaque_string2 ... Дополнительные сведения В случае, если 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 Первый пример: Клиент запрашивает документ и принимает ответ: set-cookie: customer=wile_e_coyote; path=/; expires=wednesday, 09-nov-99 23:12:40 gmt Когда клиент запрашивает url с путем "/" на этом сервере, он посылает: cookie: customer=wile_e_coyote Клиент запрашивает документ и принимает ответ: set-cookie: part_number=rocket_launcher_0001; path=/ Когда клиент запрашивает url с путем "/" на этом сервере, он посылает: cookie: customer=wile_e_coyote; part_number=rocket_launcher_0001 Клиент получает: set-cookie: shipping=fedex; path=/foo Когда клиент запрашивает url с путем "/" на этом сервере, он посылает: cookie: customer=wile_e_coyote; part_number=rocket_launcher_0001 Когда клиент запрашивает url с путем "/foo" на этом сервере, он посылает: cookie: customer=wile_e_coyote; part_number=rocket_launcher_0001; shipping=fedex Второй пример: Клиент принимает: set-cookie: part_number=rocket_launcher_0001; path=/ Когда клиент запрашивает url с путем "/" на этом сервере, он посылает: cookie: part_number=rocket_launcher_0001 Клиент принимает: set-cookie: part_number=riding_rocket_0023; path=/ammo Когда клиент запрашивает url с путем "/ammo" на этом сервере, он посылает: cookie: part_number=riding_rocket_0023; part_number=rocket_launcher_0001 Комментарий: здесь мы имеем две пары имя/значение с именем "part_number". Это наследие из предыдущего примера, где значение для пути "/" прибавилось к значению для "/ammo".
|