вторник, 28 июля 2009 г.

Почитал тут анекдотов... живот болел долго

Девушка собирается замуж и спрашивает у матери:
- Что мне надо делать, чтобы быть хорошей женой?
- Ты будь работящей, побели дом, покрась забор, испеки что-нибудь.
Свадьба прошла. Ночью девушка будит свекровь и говорит:
- Мама, пойдемте хату белить.
- Ты что, какой белить, ночь на дворе!
- Пойдемте, работать надо.
- Но у нас нет кисти!
- Ничего, вон у отца бороду обрежем и будет кисть.
Так и сделали, наутро хата побелена.
На следующую ночь все повторяется.
- Мама, пойдемте забор красить.
- Но у нас нет кисточек!
- Ничего, вон у отца усы отстрижём и покрасим.
Наутро забор покрашен. Вечером сын возвращается сын с работы и видит, что отец на дереве сидит.
- Отец, ты что это на дереве сидишь, спускайся!
- Ты где эту заразу работящую взял? Первый день ей взбрелося хату побелить, так бороду отстригли. Второй день захотелось забор покрасить, так усов лишился. А теперь она выпечь что-нибудь собралась, а дома ни одного яйца нет.



Пришли все звери леса ко льву. И говорят сил нету от зайца кого видит того и ебет. Лев говорит вопрос порешаем и пошел искать зайца. Заяц прознал про это и заперся у себя в домике. Лев в домик ломился, а достать зайца не смог. Решил по доброму с ним договориться.
- Выходи заяц поговорим.
- Не выйду.
- Да выходи, я тебе слово даю, не трону, поговорим.
- Не выйду.
- Да ладно, выходи.
- Ладно выйду... Только для уверенности пусть все звери свяжут тебя.
Связали звери Льва заяц и вышел. Подходит ко льву. Лев:
- Страшно заяц?
Заяц весь тресется :
- Страшно, первый раз льва е%%%ь буду.

Купила компания Мерседес завод АвтоВАЗ. Перенастроили производство, запускают конвеер. . . Бац! на выходе Жигули!
Демонтируют оборудование, пригнали новое из Германии, установили, наладили, запускают. ! ! ! снова Жигули!
Увольняют нахер весь персонал завода, привозят работников из Германии, налаживают, проверяют, запускают. СЦУКО! На выходе вновь - Жигули!
Около завода холм, на нём отдыхают гл. инженер и директор завода (оба с приставкой Экс). Смотрят на всё это. Инженер директору:
- А я тебе говорил - место проклятое! ! ! А ты всё "руки из жопы, руки из жопы". . .

Маленький хиленький интеллигент заходит в лифт и натыкается там на огромного верзилу 2х2. Интеллигент начинает ошарашенно разглядывать соседа. Тот ему:
- Рост - два метра 10 сантиметров, вес - 130 килограммов, левое яйцо - 2 кг, правое яйцо 3 кг, член - 25 сантиметров в длину и 10 сантиметров в толщину... Разин Вася.
Интеллигент лишается чувств. Верзила приводит его в сознание и недоуменно смотрит на него. Мужичок:
- Не могли бы вы повторить, что вы сказали до этого?
- Ну, ты на меня так глядел, и я решил сразу же ответить на вопросы, которые мне задают чаще всего: рост - 210, вес - 130, левое яйцо - 2, правое яйцо - 3 кг, член у меня длиной 25 см и толщиной 10 см...
А зовут меня Разин Вася...
- Слава Богу, а мне показалось "Раздевайся"...

Из одесского. Старенький еврей-маляр получил предложение от одной семейной пары покрасить комнаты в доме. Начал он со спальни. Вечером, хозяин дома, доктор Гринберг, решил проверить его работу и со словами, что краска на стенке выглядит уже высохшей, приложил к ней руку. Каково же было его расстройство, когда на свежепокрашенной стенке появился отпечаток его руки!
Его жена, Роза, постаралась успокоить его, уверяя, что завтра маляр закрасит пятно. Прибыв на следующее утро, старик-маляр стал размешивать краски, чтобы начать красить в кухне. Но его занятие прервала Роза:
- Прежде чем вы начнёте красить в кухне, - сказала она, - я прошу вас пройти в спальню. Я хочу показать вам место, куда мой муж положил руку прошлой ночью.
- Прошу вас, мадам! - попросил её маляр. - Я уже старый человек. Если вы хотите сделать мне приятно, лучше дайте мне стакан чая с лимоном!

Летят десантники в самолете, выходит к ним офицер и говорит:
- Парни, все летим в Афган воевать.
Парни помрачнели так... Но офицер продолжает:
- Но за голову каждого убитого душмана будем выплачивать премию - 1000$!
Самолет заходит на посадку, десантники врассыпную. Офицер в одиночестве, раскрыв рот, стоит возле самолета. Через 30 минут десантники возвращаются, тащат связки голов. Офицер падает в обморок:
- Ребята, мы же сели в Ташкенте для дозаправки...

- Там шахматисты Тайсона бьют!
- Мы тоже шахматисты!
- Так бегите скорее, там ваших уже мало осталось! . .

четверг, 16 июля 2009 г.

Обязательно прочитайте

Прошу - лично Вас - прочитать эти слова, не проматывать их

как определить инсульт

КАК ЭТО БЫВАЕТ: Во время отдыха на природе женщина упала – но заверила всех, что с ней все хорошо (друзья настаивали на вызове скорой) и что она просто споткнулась о камень, т.к. не привыкла к новой обуви. Друзья помогли ей отряхнуться и протянули тарелку с едой… А вечером позвонил ее муж и сообщил, что его жена в больнице. В 6 часов вечера ее не стало. Если бы ее друзья знали… Если пострадавшего в течение 3 часов доставить в больницу, - последствия инсульта могут быть устранены полностью!

Три основных приёма распознавания симптомов инсульта (УЗП)

У - Попросите пострадавшего УЛЫБНУТЬСЯ.

З - Попросите eго ЗАГОВОРИТЬ.
Попросить выговорить простое предложение. Связно. Например: “За окном светит солнце”

П - Попросите его ПОДНЯТЬ обе руки.

Ещё один способ распознать инсульт помимо вышеупомянутых: попросите пострадавшего высунуть язык.
Если язык кривой или неправильной формы и западает на одну или другую сторону, это тоже признак инсульта.
Если Вы отметили у пострадавшего проблему с каким-то из заданий, немедленно вызывайте скорую!

ЗЫ. Врачи уверяют, что каждый, кто разошлет этот текст 10 людям, может быть уверен: одну жизнь он спас.

Легкая неадекватность - это не плохой сон, изменившийся выговор - не проблемы с челюстью. Звоните в скорую, плюньте на приличия! Переломите внутреннее сопротивление! каждая минута уносит кусочек мозга и личности вашего родного человека! Сумейте поверить в ужасное, в конце концов, - чем обманывать себя.
Вспомните этот постинг, если однажды возникнет хотя бы малое подозрение.


Дополнения.....

http://bars-of-cage.livejournal.com/249949.html?thread=6849885#t6849885

Некоторые прзнаки указаны верно. Могу добавить еще, что можно попросить оскалить зубы - несимметричность оскала так же признак возможного нарушения мозгового кровообращения. Руки лучше не просто поднять, поскольку нарушения могут быть не так сильно выражены, а попросить пациента быстро повращать кистями вытянутых вперед рук вправо-влево (затрудняюсь описать как именно, надеюсь понятно), отставание одной из рук туда же. И еще можно попросить одновременно обеими руками сжать протянутые больному свои пальцы, если имеет место односторонний парез, пожатие на этой стороне будет значительно слабее (лучше не всю кисть для пожатия, а два пальца - обычно указательный и средний)


среда, 15 июля 2009 г.

Lenovo S10-2 vs я + Ubuntu часть 4. запустился wifi

И так продолжим...
Я уже пытался до этого запустить на моем S10-2 ubuntu 9.10 alpha, у меня тогда ни чего не вышло. Оно где-то упало, искать как всегда лень)

В итоге по рашее составленному плану я накатил 9.04 и накатил по верх 9.10, для этого использовал инструкцю от сюда: http://www.ubuntu.com/testing/karmic/alpha2,

Для апгрейда с Ubuntu 9.04 на десктоп системе, нажмите Alt+F2 и введите "update-manager -d" (без кавычек) в коммандной строке. Менеджер обновлений должен открыться и сказать вам: Доступен новый выпуск дистрибутива '9.10' (New distribution release '9.10' is available) .

To upgrade from Ubuntu 9.04 on a desktop system, press Alt+F2 and type in "update-manager -d" (without the quotes) into the command box. Update Manager should open up and tell you: New distribution release '9.10' is available. Click Upgrade and follow the on-screen instructions.

To upgrade from Ubuntu 9.04 on a server system: install the update-manager-core package if it is not already installed; edit /etc/update-manager/release-upgrades and set Prompt=normal; launch the upgrade tool with the command sudo do-release-upgrade; and follow the on-screen instructions.

По ubuntu
1. Установка 9.04.
2. Настройка сети, тут все просто, только провода (
3. Попробуем сделать sudo dest-upgrade

По Дебиану
1. Загрузиться с live-cd (там кажется 5.0.1 версия)
2. Просмотр возможных соединений
3. Если соединение удачно подымется, то установка на диск (SD карту)
4. Проверить MBR если он опять грохнут славным Дебианом, то востановить его, перенастроив sd'шку на корректную загрузку.
5. Дальше настройка окружения и т.д. и т.п.

понедельник, 13 июля 2009 г.

Lenovo S10-2 vs я + Ubuntu часть 3

Набросаю пока что такой план:

По ubuntu
1. Установка 9.04.
2. Настройка сети, тут все просто, только провода (
3. Попробуем сделать sudo dest-upgrade

По Дебиану
1. Загрузиться с live-cd (там кажется 5.0.1 версия)
2. Просмотр возможных соединений
3. Если соединение удачно подымется, то установка на диск (SD карту)
4. Проверить MBR если он опять грохнут славным Дебианом, то востановить его, перенастроив sd'шку на корректную загрузку.
5. Дальше настройка окружения и т.д. и т.п.

Lenovo S10-2 vs я + Ubuntu часть 2 или как у меня не поставился Debian

Суббота, 11 июля хорошая погода, хороший день... Нет надо было придумать себе геморой на 5-ю точку.
прослушал наставления про ядро 2.6.30, то что его можно поставить из репозитария testing.
Правда там речь шла о Debian. Думаю ладно, попробую поставить для верности Debian. Скачал netinstall.iso, запустил только сеть то не поднялась. Интерфейс eth0 есть, а dhclient не сработал. Если честно то такой наглости я даже не ожидал. Смотрю ядро, а оно оказывается 2.6.26... У-у-у-у.... И не хочет корретно работать с realtek'ом. Кстати, а реалтек ли у меня, сейчас под виндой глянуть надо... Да действительно Realtek RTL8102/8103/8136 Family PCI-E FE NIC. Возмущенью нет предела... Может надо было еще что-то подкрутить? ХЗ! Теперь буду пытаться с live-cd прогрузиться...
А вот еще что... когда увидел что не получается поднять eth0, думаю ладно попробую опять бубунту... Поставить не проблема...
Ставлю ubuntu 9.04, она прекрастно ставится на SD-карту (все установки я делаю пока только на SD'шку 16Gb). Вспоминаю про ветку testing.
Ну думаю ладно если его можно поставить из testing то почему бы его не поставить из Karmic Koala? Для добавления его реп решил скопировать /etc/apt/sources.list в /etc/apt/sources.list.d/karmic.list и заменил jaunty на karmic.
Зная что wifi/wimax не хочет пахать под бубном, хочу загрузиться под винду... Упс... а флешку я вынул, и выясняю что у меня оказывается Дебиан прописал почему-то grub в mbr жесткого диска... я в шоке. Срочно ищу установочный диск с Windows (легальный диск между прочим). Пытаюсь прогрузиться с консоль востановления, а оно угадайте что делает........
ПАДАЕТ В СИНИЙ ЭКРАН СМЕРТИ
Вот это да.... Ну думаю может привод сбойнул... Вторая попытка приводит к тому же. Вот думаю попал... OneKey Recovery не помогает, система востановилась до заводских настроек, но MBR'ом даже не пахнет.
Попытка прогрузиться с INFR@ CD тоже уводит меня в СИНИЙ ЭКРАН СМЕРТИ. В итоге сегодня (13 июля) добрался до работы, переставил диск в Большого Брата и сумел прогрузиться в консоль востановления. А там все просто FIXMBR, FIXBOOT (уже на всякий случай) и О ЧУДО мы это сделали винда загрузилась.

Пока все....

з.ы. Забыл сказать что при установке ядра из Кармик у меня не заработали Иксы, но не стал разбираться. Было нужнее востновить загрузку Винды. Как пока что экстренное средство связи.

Пока все. Продолжение в следующей серии )

пятница, 10 июля 2009 г.

Lenovo S10-2 vs я & Ubuntu часть 1

Купил давеча сей девайс.

То что мне в нем нравится:
  1. Средства связи Ethernet/Bluetooch/WiFi/WiMax (yota)
  2. Дизайн (сравниваю с eee-pc 900 )
Что хочу:
  1. Поставить ubuntu и дальше работать
Установка Ubunt'ы прошла спокойно, ставил 9.04, остановился пока на ней т.к. скорость запуска не превышает 30 секунд (на глаз).
Кстати, для сохранения винды ставлю бубен на SD карту 16Gb

После установки:
  1. Обратил внимание что не правильно отработал grub install (загрузчик), пока у себя не правил, но там нужно залесть в /boot/grub/menu.lst и отредактировать пункты запуска винды, в моем случае строки (hd0,x) заменить на (hd1,x), так как SD в момент загрузки является (hd0), а правильный винчестер (hd1). С этитой проблемой сталкивался уже несколько раз, поэтому и отложил.
  2. Не работает WiFi/WiMax. Пытаюсь разобраться, для тех кому интересно вот пара ссылок где я начал беседу:
    • http://ubuntuforums.org/showthread.php?t=1209237
    • http://forum.ubuntu.ru/index.php?topic=61965.0
    • http://community.livejournal.com/ru_linux/2246639.html

    Так же вот ссылки на дополнительные ресурсы
    • http://community.livejournal.com/yota_ru/270575.html
    • http://www.linuxwimax.org/
    • http://linuxwimax.org/pipermail/wimax/2009-February/000469.html
    • http://icelord.net/wordpress/archives/1151
    • http://bbs.archlinux.org/viewtopic.php?id=73823
    • https://bugs.launchpad.net/ubuntu/+source/linux/+bug/308848
    • http://www.intellinuxwireless.org/
    • http://linuxwireless.org/en/users/Download
    • http://community.livejournal.com/ru_linux/2213746.html
    • http://translate.google.ru/translate_s?hl=ru&clss=&q=linux+intel+wimax&tq=&sl=ru&tl=en

  3. Звук - работает

  4. микрофон - не проверял

  5. Управляющие клавиши типа Fn+Key побольшому счету работают



Вот пока и все. Сейчас продолжу мучать WiFi/WiMax а то дома и на работе в нет не слазить с дивана :)

з.ы. Может придется откатиться на 8.10 там нормально работает мой edge модем (huawei e160)

вторник, 7 июля 2009 г.

Что такое cookies и как с ними работать (Андрей А.Аликберов)

Что такое cookies и как с ними работать

Андрей А.Аликберов

Откуда возник термин "cookie" никто достоверно не знает, хотя считается, что во времена зарождения Unix-систем где-то использовалось словосочетание Magic Cookies. Имелись в виду "квитанции" (token, ticket), которыми обменивались программы.

Cookie является решением одной из наследственных проблем HTTP протокола (HyperText Transfer Protocol). Эта проблема заключается в непостоянстве соединения между клиентом и сервером, как при FTP или Telnet сессии, т.е. для каждого документа (или файла) при передаче по HTTP протоколу посылается отдельный запрос. Включение cookie в HTTP протокол дало частичное решение этой проблемы. Иначе говоря, транзакция завершается после того, как браузер сделал запрос, а сервер выдал соответствующий ответ. Сразу после этого сервер "забывает" о пользователе и каждый следующий запрос того же пользователя считает новым пользователем.

Используя cookie, можно эмулировать сессию по HTTP протоколу. Коротко принцип эмуляции сессии таков: на первом запросе выдается соотвествующее значение cookie, а при каждом последующем запросе это значение читается из переменной окружения HTTP_COOKIE и соответствующим образом обрабатывается.

Простой пример: есть форма, где пользователю предлагается указать свое имя, из нее вызывается скрипт, прописывающий значение cookie в браузер пользователя. При каждом последующем заходе на основе анализа значения cookie из браузера пользователя на странице появляется либо именное приветствие (если есть установленное значение cookie), либо первоначальная форма с запросом имени пользователя (если значение cookie не установлено).

Cookie - это небольшая порция текстовой информации, которую сервер передает браузеру. Браузер будет хранить эту информацию и передавать ее серверу с каждым запросом как часть HTTP заголовка. Одни значения cookie могут храниться только в течение одной сессии, они удаляются после закрытия броузера. Другие, установленные на некоторый период времени, записываются в файл. Обычно этот файл называется 'cookies.txt' и лежит в рабочей директории установленного на компьютер браузера. У меня, к примеру, в этом файле содержится следующее:

# Netscape HTTP Cookie File

# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file! Do not edit.
www.webclub.ru FALSE /ourweb FALSE 946683907 1 1
.bizlink.ru TRUE / FALSE 915148488 u_irads_watch 627633
.doubleclick.net TRUE / FALSE 1920499140 id 332666ae
.yahoo.com TRUE / FALSE 915144943 Y v=1&n=6jm0u5lgubh1k&l=0b8a0d3h/o&p=m29vvru7130a
.yahoo.com TRUE / FALSE 915144943 T z=3587c277
mail.yahoo.com TRUE / FALSE 943919791 YM.Login
id%3d%241%24rm%24L6MDTCsrCNnk3syLZl2zo.%26sid%3dszxPh4SazGg/%250a%26ts%3dX%2588%25c3%2506%25d3%25e5I-%255d%253f%2597%25ddu
.preferences.com TRUE / FALSE 1182140165 PreferencesID 3AGN9WD1D80gQfjvjAxRuq
.geocities.com TRUE / FALSE 900743217 iTag gY6bZzWItDQAAWll3T8ASk1vbiwgMTMg
search.netscape.com FALSE / FALSE 942189477 NGUserID cfc84d2a-522-898178454-1
www.webclub.ru FALSE FALSE 913543999 visited yes

Как видно, у меня оставили cookie Российский клуб вебмастеров, поисковая система AltaVista, бесплатный почтовый сервер Yahoo, Netscape Communications, рекламные сети DoubleClick и отечественная InterReklama. В настоящее время большинство браузеров поддерживает механизм cookies. Я точно знаю, что cookie можно использовать во всех версиях Netscape Navigator, Microsoft Internet Explorer и NCSA Mosaic.

Что можно делать с помощью cookie?
Сами по себе cookies не могут делать ничего, это только лишь некоторая текстовая информация. Однако сервер может считывать содержащуюся в cookies информацию и на основании ее анализа совершать те или иные действия. Например, в случае авторизованного доступа к чему либо через WWW в cookies сохраняется login и password в течение сессии, что позволяет пользователю не вводить их снова при запросах каждого документа, защищенного паролем.

На использовании cookies также часто строят функции оформления заказов в онлайновых магазинах, в частности, в самом крупном виртуальном книжном магазине Amazon Books реализована своеобразная виртуальная корзина покупателя, как в обычном реальном супермаркете, в которую сервер записывает информацию обо всех заказанных книгах. Пользователь просто помечает интересующие его книги, а затем оформляет покупку сразу всех отмеченных книг.

Еще одна распространенная область использования cookies - при настройке индивидуального профиля каждого зарегистрированного пользователя.

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

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

Формат и синтаксис cookie
Предлагаемое мной в этой статье описание формата и синтаксиса cookie является вольным пересказом изначальной спецификации Netscape Communications "Persistent Client State HTTP Cookies". В настоящий момент идет разработка более строгой спецификации для cookie. Итак, cookie является частью HTTP заголовка. Полное описание поля 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 должна стоять дата в формате "expires=Monday, 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". Для обсуждаемых сейчас новых семи доменов первого уровня ("FIRM", "SHOP", "WEB", "ARTS", "REC", "INFO", "NOM"), вероятно, это условие сохранится. Для доменов иерархии "RU", например, придется указывать три периода.

Если этот атрибут опущен, то по умолчанию используется доменное имя сервера, на котором было задано значение cookie.

path=PATH - этот атрибут устанавливает подмножество документов, для которых действительно значение cookie. Например, указание "path=/win" приведет к тому, что значение cookie будет действительно для множества документов в директории /win/, в директории /wings/ и файлов в текущей директории с именами типа wind.html и windows.shtml. Для того, чтобы cookie отсылались при каждом запросе к серверу, необходимо указать корневой каталог сервера, например, "path=/".

Если этот атрибут не указан, то значение cookie распространяется только на документы в той же директории, что и документ, в котором было установлено значение cookie.

secure - если стоит этот маркер, то информация cookie пересылается только через HTTPS (HTTP с использованием SSL - Secure Socket Level), в защищенном режиме. Если этот маркер не указан, то информация пересылается обычным способом.

Синтаксис HTTP заголовка для поля Cookie
Когда запрашивается документ с HTTP сервера, браузер проверяет свои cookie на предмет соответствия домену сервера и прочей информации. В случае, если найдены удовлетворяющие всем условиям значения cookie, броузер посылает их в серверу в виде пары имя/значение:

  Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...

Дополнительные сведения
Одновременно можно задавать несколько значений cookie.

В случае, если cookie принимает новое значение при имеющемся уже в браузере cookie с совпадающими параметрами NAME, domain и path, то старое значение заменяется новым. В остальных случаях новые значения cookie добавляются к старым.

Использование expires не гарантирует сохранность cookie в течение заданного периода времени, поскольку клиент (браузер) может удалить запись из-за нехватки выделенного места или каких-либо других причин.

Клиент (браузер) имеет следующие ограничения для cookies:

  • всего может храниться до 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.

Ниже приведено несколько примеров, иллюстрирующих использование cookies

Пример 1. Управление подмножеством документов, для которых действительны значения cookie, и их сроком годности
Браузер запрашивает документ и принимает от сервера в ответ:

  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:
  Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001
Сервер установил еще одно значение cookie, на этот раз с другой областью действия:
  Set-Cookie: SHIPPING=FEDEX; path=/foo
Теперь браузер, запрашивая URL с путем "/" на этом сервере, посылает лишь два значения cookie:
  Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001
и лишь при запросе браузером документов с путем "/foo" на этом сервере посылаются все три значения cookie:
  Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001; SHIPPING=FEDEX
Комментарий: после закрытия браузера в файле 'cookies.txt' останется только одно значение cookie:
  CUSTOMER=WILE_E_COYOTE
поскольку только для него установлен срок годности - 9 ноября 1999 года. Все остальные значения не будут сохранены.

Пример 2. Значения cookie с одинаковыми именами, но разными параметрами
Браузер запрашивает документ и принимает ответ от сервера:

  Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/
Когда браузер запрашивает URL с путем "/" на этом сервере, он посылает значение:
  Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001
Во второй раз, запрашивая документ, браузер принимает от сервера значение cookie с другой областью действия:
  Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammo
Когда браузер запрашивает URL с путем "/ammo" на этом сервере, он посылает значение:
  Cookie: PART_NUMBER=RIDING_ROCKET_0023; PART_NUMBER=ROCKET_LAUNCHER_0001
Комментарий: здесь мы имеем две пары имя/значение с одинаковым именем "PART_NUMBER". При закрытии браузера ни одно из этих значений не сохранится, поскольку не задан параметр expires.

Способы задания значений cookie
Способ задания значений cookie зависит того, как эти значения будут использоваться и какие имеются серверные ресурсы. Можно манипулировать временем жизни выставленных cookie и устанавливать подмножества URL (Universal Resource Locator), в которых заданные значения действительны. Есть несколько способов задания, наиболее часто используются три - через META-таги языка HTML, JavaScript и CGI-скрипты. Любым способом можно задавать как одно, так и несколько значений сразу. Сразу хочу предупредить - не забывайте об ограничениях по объему и количеству значений cookie, а также параметре domain, так как помимо основного доменного имени узла часто бывает несколько алиасов (alias).

1. Задание cookie с помощью META-тагов
Простейший способ выставить cookie - использовать соответствующий META-таг в контейнере ... любого статического HTML документа. В общем случае это выглядит следующим образом:

Такой способ задания cookie, на мой взгляд, наиболее интересен для создателей маленьких домашних страничек, когда нет возможности писать свои собственные CGI-скрипты. А если есть поддержка SSI (Server Side Include) или PHP/Fi, то можно делать интерактивные страницы вообще без использования внешних CGI-скриптов. При наличии SSI на узле создание интерактивности с использованием механизма cookie становится просто удовольствием.

С помощью cookie задается на любой статичной странице, директивой можно потом считать любые переменные окружения, в том числе и ранее заданные значения cookie (переменная HTTP_COOKIE), а с помощью конструкций , и задавать различные варианты внешнего вида страниц. Так же просто можно проделывать подобные вещи, используя PHP/Fi.

Если же ни SSI, ни PHP/Fi недоступен, то можно задавать значение cookie, используя JavaScript.

2. Задание cookie с помощью JavaScript
Можно задавать значение cookie, используя язык JavaScript. Единственный недостаток этого способа заключается в том, что не все браузеры его поддерживают. Ниже приведены примеры функций JavaScript, написанные Алексеем Александровым для скрипта "Органайзер". Этот скрипт, по-моему, один из лучших образцов программирования на JavaScript с использованием cookie, поэтому я настоятельно рекомендую посмотреть на работающий образец по адресу http://www.citforum.ru/internet/javascript/exorg.shtml

Пример 3. Функция установки значения cookie

// name - имя cookie

// value - значение cookie
// [expires] - дата окончания действия cookie (по умолчанию - до конца сессии)
// [path] - путь, для которого cookie действительно (по умолчанию - документ, в котором значение было установлено)
// [domain] - домен, для которого cookie действительно (по умолчанию - домен, в котором значение было установлено)
// [secure] - логическое значение, показывающее требуется ли защищенная передача значения cookie

function setCookie(name, value, expires, path, domain, secure) {
var curCookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "")
if (!caution || (name + "=" + escape(value)).length <= 4000)
document.cookie = curCookie
else
if (confirm("Cookie превышает 4KB и будет вырезан !"))
document.cookie = curCookie
}

Пример 4. Функция чтения значения cookie
Возвращает установленное значение или пустую строку, если cookie не существует.

// name - имя считываемого cookie


function getCookie(name) {
var prefix = name + "="
var cookieStartIndex = document.cookie.indexOf(prefix)
if (cookieStartIndex == -1)
return null
var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
if (cookieEndIndex == -1)
cookieEndIndex = document.cookie.length
return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

Пример 5. Функция удаления значения cookie
Принцип работы этой функции заключается в том, что cookie устанавливается с заведомо устаревшим параметром expires, в данном случае 1 января 1970 года.

// name - имя cookie

// [path] - путь, для которого cookie действительно
// [domain] - домен, для которого cookie действительно
function deleteCookie(name, path, domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT"
}

Работающий пример персонализации пользователя, построенный на JavaScript и использующий механизм cookie.

3. Задание cookie с помощью CGI-скриптов
Самый мощный и гибкий способ управления документами с использованием механизма cookie - с помощью CGI-скриптов. Задание значения cookie на Perl будет выглядеть следующим образом:

  print "Content-type: text/html\n";

print "Set-Cookie: username=aaa13; expires=Friday, 31-Dec-99 23:59:59 GMT; path=/; domain=www.citforum.ru;\n\n";
Скрипт при выдаче результатов работы генерирует HTTP заголовок:
  Content-type: text/html

Set-Cookie: "username=aaa13; expires=Friday, 31-Dec-99 23:59:59 GMT; path=/; domain=www.citforum.ru;"

Чтобы прочитать в скрипте ранее заданное значение cookie, используется переменная окружения HTTP_COOKIE.

  $cookie = $ENV{'HTTP_COOKIE'};

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

Совсем недавно я написал систему рейтинга серверов для Российского Клуба Вебмастеров, которая использует механизм cookie для защиты от накрутки очков. В ней, задавая и анализируя значения cookie, я либо не допускаю пользователя до голосования (если отключены cookie в браузере или пользователь один раз уже проголосовал), либо разрешаю голосовать (если соответствующее значение не задано). Обмануть такую систему можно, только стирая каждый раз файл cookies.txt. Можно было бы использовать файл логов голосования на узле, но возникали бы проблемы разделения доступа к файлу и замедление работы вследствие использования медленных дисковых операций.

Немного о проблемах, связанных с использованием cookie
Главной проблемой является изначальное недоверие пользователей к тому, что удаленные сервера без их (пользователей) ведома и согласия записывают на их собственные локальные диски какую либо информацию. Бытовали также слухи о том, что с помощью механизма cookie можно прочесть любую информацию с любого компьютера. Это неправда, к тому же современные версии браузеров позволяют контролировать прием cookie или вовсе блокировать его. Кроме того, появилось множество специальных утилит для управления приемом cookie, так называемые Cookie Managers.

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