Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 25 Май, 2012, 09:00:37

Страниц: [1] 2
Печать
Автор Тема: Cookie  (Прочитано 21981 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vasa_c    ↓ 
03 Август, 2007, 09:38:35
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

HTTP-Cookies или Куки — служебная информация, посылаемая веб-сервером на компьютер пользователя, для сохранения в браузере.
 
По сути, это аналог переменных, которые можно хранить у пользователя. Механизм их установки и получения следующий:
 
1. При запросе страницы браузером, сервер формирует ответ, в заголовках которого указывает, что следует установить соответствующие куки.
2. Браузер получает ответ и сохраняет значения кук.
3. При последующем запросе страницы того же сайта, браузер в заголовках запроса посылает куки на сервер.
 

Область применения
 
Первое, что нужно помнить - куки хранятся у клиента и он может делать с ними что хочет. Пользователи Firefox даже не обязаны обладать базовыми техническими знаниями - там куки можно просмотреть и изменить, прямо в меню.
 
Второе - некоторый процент населения услышав краем уха, что-то про страшные куки и потерю личной информации, куки отключает, даже не разобравшись в сути вопроса.
 
Поэтому, куки подходят для сохранения каких-либо настроек пользователя. Например, интерфейсных - упорядочил табличку по одному из столбцов, зашел в следующий раз, а упорядочивание сохранено.
 
Подходят они так же для сбора общей усредненной статистики по достаточно большому количеству человек. Например, при отслеживании уникальных пользователей на сайте. Если их около 100 000, то скорее всего, подавляющее большинство не будет отключать или подделывать куки.
 
Для хранения конфеденциальных данных они не подходят.
 
Для идентификации пользователей подходят с оговорками. Например, после авторизации вы можете положить пользователю в куку его логин и на следующих страницах идентифицировать его уже по нему. Но ничто (кроме технической грамотности) не помешает человеку зайдя под логином "misha", потом исправить соответствующую куку на "admin". Обычно же, в куку кладут идентификатор сеанса, представляющий собой случайную 32-разрядную строку. Тут уже надежды на то, что пользователь не сможет подобрать чужой идентификатор, значительно выше.
 
Еще один момент - число кук одного сайта ограничено (обычно пара десятков). Их суммарный объем так же ограничен (несколько килобайт). Поэтому хранить много информации не получится. Если это необходимо, используйте куки для идентификации пользователя, а связанную с этим пользователем информацию, храните на сервере.
 

Установка кук
 
В PHP куки устанавливаются функцией setCookie(). Её параметры:
 
name   - имя куки
value  - значение. Установка пустой строки, позволяет удалить уже существующую куки.
expire - время (unix-формат) устаревания куки. Установка времени, меньше текущего так же позволяет удалить куку. Обратите внимание, что это именно время устаревания, а не время жизни. Т.е. для установки куку на час следует делать так:
PHP

setCookie("cook", "value", time() + 3600); // Правильно
setCookie("cook", "value", 3600); // Не правильно
 
При указании expire=0, кука считается сессионной, т.е. живет до закрытия окна браузера.
path - каталог, на который распространяется кука. По умолчанию - каталог сценария, который эту куку установил. Здесь таится достаточно распространенная ошибка - в большинстве случаев программист хочет установить куку на весь сайт, но забывая про этот аргумент, ставит её только на каталог, а потом долго ищет ошибку. Нужно указывать четко:
PHP
setCookie("cook", "value", 0, "/"); // "/" - корень сайта: устанавливаем на весь сайт
domain - позволяет установить куку на основной домен и поддомены. ".domain.com" распространит ее действие на поддомены данного домена. Надеюсь, все понимают, что поставить такую куку можно только с одного из этих поддоменов. Так же не старайтесь поставить её на домен первого уровня, например, ".ru" :)
secure - запрещяет передавать куку по HTTP. Можно только по HTTPS.
 
Помните, что куки, являются http-заголовками и на них так же распространяется проблема с "Cannot add header information".
 

Получение кук. Массив $_COOKIE
 
При запросе страницы, до вызова сценария, PHP формирует массив $_COOKIE (наряду с $_GET, $_POST и др). В него, попадают пришедшие куки, которые можно оттуда получить.
 
По этому поводу помните следующие вещи:
 
$_COOKIE заполняется перед стартом сценария. Во время выполнения сценария это обычный массив (разве что суперглобальный).
PHP
$_COOKIE['cook1'] = 'value';
unSet($_COOKIE['cook2']);
Имеют смысл только как операции с элементами обычного массива. Никакие куки в браузере клиента от этого не появятся и не удалятся. Устанавливайте и удаляйте куки при помощи setCookie().
 
setCookie() устанавливает заголовок ответа, который будет послан браузеру. В следующий раз браузер при запросе отправит куку серверу и она будет записана в $_COOKIE при запуске сценария. Искать куку в том же сценарии не имеет смысла:
PHP

setCookie("cook", "value");
print $_COOKIE["cook"]; // Не будет её тут
 
Записан

pyhtelkin    ↓ 
03 Август, 2008, 04:58:58 , спустя 365 дней 19 часов 20 минут 23 секунды
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 104
Сила слова: 1.92

Можно ли в одном и том же запросе совмещать удаление и постановку одной и той же куки? Именно постановку, но с предварительным удалением её же.
Записан
adw0rd    ↓ 
03 Август, 2008, 05:23:13 , спустя 24 минуты 15 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

pyhtelkin, юбилейную тему поднял :)
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
megabit    ↓ 
03 Август, 2008, 05:25:38 , спустя 2 минуты 25 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 6
Сообщений: 362
Сила слова: 1.66

pyhtelkinх еще один некропостер :-)
Записан
adw0rd    ↓ 
03 Август, 2008, 05:45:46 , спустя 20 минут 8 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

Алексей, да ладно, он же по делу! Чего сразу некропостер то...?
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
adw0rd    ↓ 
03 Август, 2008, 05:46:40 , спустя 54 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67


Можно ли в одном и том же запросе совмещать удаление и постановку одной и той же куки? Именно постановку, но с предварительным удалением её же.

покажи как именно
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
KENDO    ↓ 
03 Август, 2008, 06:30:11 , спустя 43 минуты 31 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 10
Сообщений: 444
Сила слова: 2.25

Хм... куки никак не удалить, кроме как поставить прошедшее время.
А вот перезаписать, думаю, можно (т.е. фактически новую информацию пишем).
Записан
adw0rd    ↓ 
03 Август, 2008, 07:08:52 , спустя 38 минут 41 секунду
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

Хм... куки никак не удалить, кроме как поставить прошедшее время.
KENDO, это и есть удаление куки, так как просроченные куки - удаляются.
 
А вот перезаписать, думаю, можно (т.е. фактически новую информацию пишем).
Переписать их можно без сомнения можно.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
pyhtelkin    ↓ 
03 Август, 2008, 09:36:02 , спустя 2 часа 27 минут 10 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 104
Сила слова: 1.92

Поправка. Да, практически я ее собираюсь перезаписывать, но предварительно еще и удаляя (через просрочку срока ее годности). Для меня принципиально важен вопрос, будет ли эта операция возможна. Понимаю что необходимость ее многим непонятна из-за банальности, но мне кажется что в ней есть реально практический смысл, И ЕЩЕ исходя из того что я сознательно хочу отказаться от проверок времен жизней.
 
Итак, есть план:
1) [удалить куку "А"]
2) [поставить куку "А"]
 
В чем и был вопрос, состоятся ли сии события на стороне клиента, и сохранится ли их последовательность?
« Последнее редактирование: 03 Август, 2008, 09:38:28 от pyhtelkin » Записан
adw0rd    ↓ 
03 Август, 2008, 09:38:01 , спустя 1 минуту 59 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

pyhtelkin, зачем удалять, если ты ее всерано создаешь? Просто измени ее и все.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
pyhtelkin    ↓ 
03 Август, 2008, 09:46:52 , спустя 8 минут 51 секунду
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 104
Сила слова: 1.92

Adw0rd, скажем так ..... я встретил ситуацию, при которой последовательность этих действий имеет смысл. Цель - сделать корректный обработчик статуса принятия кук не на основе анализа временных параметров.
« Последнее редактирование: 03 Август, 2008, 10:11:55 от pyhtelkin » Записан
adw0rd    ↓ 
03 Август, 2008, 10:07:10 , спустя 20 минут 18 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

pyhtelkin,
 

xxx: хочу чтобы phpinfo() выводил дату рождения моей любимой!!!
yyy: а нах это тебе?!?!
xxx: скажем так ..... я встретил ситуацию, при которой последовательность этих действий имеет смысл.

Все имена вымышлены, любое совпадение является случайным.
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
adw0rd    ↓ 
03 Август, 2008, 10:09:32 , спустя 2 минуты 22 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

pyhtelkin, а теперь серьезно.
 
* Удалять можно только при помощи изменения времени жизни куки.
* Да, ты можешь удалить и тут же создать в одном сценарии, но я не проверял. И интересно почему, если у тебя возникла такая ситуация, то ты не проверил можно ли проводить такие операции??
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
pyhtelkin    ↓ 
03 Август, 2008, 10:48:47 , спустя 39 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 2
Сообщений: 104
Сила слова: 1.92

Про как удалять знал. В целом - тоже понятно. Но вот интересно бы услышать еще тех кто проверял.
 
А вот стоит ли в механизме проверщика возможности установки кук, делать еще предварительную проверку возможности их установки - тут я не знаю, видимо надо будет посоветоваться. Но т.к. это есть отдельный вопрос, и он несколько другой природы, под него заведем отдельную тему на отдельном форуме, для специалистов других областей. =))
Записан
adw0rd    ↓ 
03 Август, 2008, 10:59:04 , спустя 10 минут 17 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17633
Сила слова: 1.67

pyhtelkin, больше не курите... вам вредно.
 
Куки: (http://www.faqs.org/rfcs/rfc2965 читать "5.3  Implementation Limits")
20 на домен, 4 кб данных на куку.

Проверка:
PHP
<?php
if(isset($_COOKIE['Твое_имя_куки'])) {}
?>
 

« Последнее редактирование: 03 Август, 2008, 11:02:18 от adw0rd » Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Страниц: [1] 2
Печать
 

Перейти в: