Andreas Evagora Слышали ли вы что-нибудь о cookies? В дословном переводе с английского языка слово cookies означает "печенье". Но у специалистов по компьютерным сетям оно вовсе не ассоциируется с кондитерским делом. Так называются небольшие программы, очень полезные для создателей Web-узлов и специально разработанные для того, чтобы помочь им преодолеть анонимную природу World Wide Web (WWW). Применение данной технологии позволяет операторам сайтов накапливать некоторую идентифицирующую информацию непосредственно на машине клиента. А это, в свою очередь, дает возможность хозяину Web-узла узнавать, с кем он имеет дело при его посещении пользователем. Собственно cookie - это заголовок Hypertext Transfer Protocol (HTTP), содержащий строку, которую броузер сохраняет в небольшом текстовом файле на жестком диске пользователя в каталоге Windows\Cookies (для Microsoft Internet Explorer) или Users folder (для Netscape Navigator). По размеру cookies могут достигать 4 Kбайт, но обычно не превышают пары сотен байтов. Откуда появились cookies? Спецификация cookies была написана Лу Монталли, ныне менеджером по протоколам подразделения клиентских продуктов Netscape, для Navigator 1.0 - первого броузера с подобной технологией. По поводу названия Монталли говорит, что в нем нет ничего странного: cookie - это хорошо известный компьютерный термин, обозначающий часть данных, которую использует для своих целей посредник при их передаче. То есть термин точно соответствует употреблению, но вне компьютерной сферы он был ранее практически неизвестен. Хотя спецификация cookies уже значительное время разрабатывается компаниями, особенно представляющими сетевые услуги, но только недавно их рассмотрением занялись группы по стандартам. Эта технология изучается Internet Engineering Task Force (IETF) в рамках исследований по управлению персональными данными пользователей. Для чего нужны cookies? Предназначение cookies - помочь операторам сайтов преодолеть тот недостаток, что HTTP, на котором построена Web, в принципе обезличен для сервера со стороны клиента. Другими словами, пользователи при каждом доступе к странице вашего Web-узла являются для него чужаками. Вне зависимости от того, сколько информации получил пользователь на предыдущей странице или во время предыдущего визита, без cookies сайт не сможет отличить того, кто находится в режиме on-line 12 часов от того, кто только что влетел сюда из Yahoo. HTTP не может сказать, кому он посылает страницы или какие другие страницы уже переданы им какому-либо конкретному пользователю. Это было сделано намеренно, для эффективного осуществления серверных операций, поскольку HTTP не загружен сопровождением пользователей. Однако это означает значительное увеличение объема работы для сетевых операторов, желающих узнать, кто находится на другом конце линии. Cookies обеспечивают хозяина Web-узла подобной информацией, отслеживая перемещения пользователя по сайту со страницы на страницу (вот почему их полное название - persistent cookies, т.е. "упорные cookies"). Эти данные очень важны, потому что если вы не знаете ничего о своих пользователях, то не сможете создать Web-сайт, который отвечал бы их интересам и привычкам. Так, например, cookies могут использоваться для того, чтобы определить, на какой странице (PC или Macintosh) должен обслуживаться клиент при загрузке ПО. Если на информационном Web-сервере нехватка данных о пользователях крайне раздражает, то на коммерческом она совершенно недопустима для успешного ведения бизнеса. Ибо продавцы, которые не могут вспомнить имен своих лучших клиентов или как они любят расплачиваться за товар, заплатили они или нет, по всей вероятности, преуспевать не будут. Просто невозможно создать коммерческий сайт без какого-либо механизма распознавания пользователей при их передвижении по его страницам. Cookies позволяют собирать о посетителях достаточно информации, чтобы в будущем можно было точно определить, кто они и что им нужно. В зависимости от возможностей базы данных сервера эта информация может быть минимальной. Например, если вы используете табличную базу данных для записи сведений про вхождение клиента, предпочитаемую им форму оплаты, адрес поставки и содержимое его покупательской корзины, то единственное, что вам нужно сохранять в cookie - это указатель на запись про клиента в таблице. Это намного более эффек- тивно и безопасно, чем использовать cookie для сохранения всех данных регистрационной формы пользователя. Есть ли альтернативы cookies? Cookies вовсе не являются единственным способом передачи персональных данных. Задолго до того, как они появились, существовало, по крайней мере, 2 метода, которые использовались с этой целью: передача данных через спрятанные поля в форме или их прибавление в конце URL (унифицированного указателя ресурса WWW). Однако и спрятанные поля, и использование URL имеют существенные недостатки. Чтобы ис-пользовать спрятанные поля, вам нужно будет обрабатывать каждый запрос на страницу как form Submit (поступивший на рассмотрение), что выглядит все более анахроничным в эпоху динамичного Hypertext Markup Language (HTML). Метод же URL-суффикса неудовлетворителен с точки зрения безопасности, поскольку не только показывает, откуда пришел запрос, но и может сообщить любопытным имя и пароль пользователя. Cookies, казалось бы, превосходят их по легкости использования, гибкости и надежности. Почему же тогда многие Web-клиенты и даже некоторые хозяева узлов перепуганы до смерти cookies? Правда и выдумки о cookies Использование cookies крайне затруднено из-за потока нелестных отзывов в прессе, диких слухов и полуправды. Эта технология подвергалась нападкам с самого начала. Хотя на самом деле cookies не больше, чем электронные почтовые индексы для Web-серверов, они привлекли внимание теоретиков конспиративности и неосервайвалистов, которые нагромоздили кучу историй о всяких ужасных вещах, которые могли бы натворить cookies. Они утверждают, что любой сайт может их прочитать на жестком диске пользователя, что их можно использовать для кражи информации с жестких дисков и что cookies представляют различные другие угрозы приватности и безопасности пользователей. Большинство (если не все) из этих обвинений ложны. В частности, прочитать cookie может только домен сайта, который его создал, а сберегаться в нем может только информация, предоставленная узлом или самим пользователем. Cookies не обладают способностью ни просматривать содержимое жесткого диска пользователя, ни передавать частную информацию клиента в Internet. Они являются электронным блокнотом для Web-сайта и ничем более. Мир постепенно начинает понимать, что cookies вовсе не являются ядовитой начинкой. Фактически недоверие к cookies уже бы исчезло к настоящему времени, если бы одна из компьютерных сетей в США не использовала их для отслеживания действий пользователей вWWW таким способом, который многие находят неприемлемым. Попытки DoubleClick Network создать профили клиентов и встречать их соот-ветствующей рекламой преследовали цель полнее удовлетворить интересы пользователей. При каждом подключении клиента к узлу DoubleClick, сервер читает и/или записывает cookie на его жесткий диск, накапливая при этом обширную информацию о действиях пользователя на сайте. После того как это стало известно широкой публике, поднялась буря возмущения. Компания немедленно заявила, что она не собирает и не хранит имен пользователей, адресов их электронной почты или телефонных номеров, не продает и не сдает в аренду собранную информацию, а ее единственной целью было поставлять на своих сайтах персонализированную рекламу. Тем не менее DoubleClick Network была вынуждена в срочном порядке предоставить бесплатную программу для отключения своего следящего механизма. По иронии судьбы эта программа тоже является cookie. Яростные споры вокруг DoubleClick Network наглядно продемонстрировали, что вовсе не новые технологии открывают шлюзы для безудержного злоупотребления приватной информацией или создают бреши в системах безопасности пользователей. Виноваты в этом люди, которые их неправильно используют. В действительности вы находитесь в гораздо большей опасности, когда даете вашу кредитную карточку официанту в ресторане, чем когда принимаете cookie с заслуживающего уважения Web-узла. Тем не менее, как и при любой сделке, осторожный клиент предпримет все необходимые действия, чтобы убедиться, что он имеет дело с пользующимся репутацией сайтом. Как создать или уничтожить cookie? Операторы Web-узлов могут создавать cookies с помощью программ CGI или JavaScript. JavaScript проще и не требует программирования сервера. Однако как при использовании CGI, так и любого другого инструмента сервера, непосредственным создателем cookie является Document Object броузера. Таким образом, то ли вы применяете CGI, Microsoft Active Server Pages (поддерживаемые IIS 3.0 или более поздними версиями), то ли JavaScript, вы используете тот же самый код, чтобы приказать броузеру прочитать, написать или уничтожить cookie. Есть очень много Web-серверов с JavaScript-кодом для создания cookies, но почти все они берутся непосредственно из классического кода, разработанного и помещенного в публичный домен Биллом Дортчем. Функция SetCookie Дортча обеспечивает эффективный механизм для установки всего диапазона параметров cookie: его имени, значения, даты и времени истечения срока действия, пути, домена; кроме того, она сообщает, необходима или нет безопасная страница. function SetCookie(name,value,expires,path,domain,secure) { document.cookie=name+"="+escape(value)+ ((expires)?";expires="+expires.toGMTString():"")+ ((path)?";path="+path:"")+ ((domain)?";domain="+domain:"")+ ((secure)?";secure":""); } Параметр expiration data особенно полезен для коммерческих сайтов. Он помогает гарантировать, что вы все еще имеете дело с тем же самым клиентом. Например, каждый раз, когда зарегистрированный пользователь делает что-либо на вашем узле, вы можете записывать cookie с expiration time, установленным на 90 минут. Если срок истек, то вы будете знать, что прошло больше 90 минут, с тех пор как пользователь последний раз соединился или как-либо иначе взаимодействовал с вашим сайтом, и вы должны потребовать, чтобы он вошел снова. JavaScript для чтения cookie - очень простая функция (тоже код Дортча): function GetCookie(name){ var arg=name+"="; var alen=arg.length; var clen=document.cookie.length; var i=0; while (i Еще одна функция getCookieVal извлекает значение cookie из строки, которая возвращается при чтении document.cookie: function getCookieVal(offset) { var endstr=document.cookie.indexOf(";",offset); if (endstr==-1) endstr=document.cookie.length; return unescape(document.cookie.substring ( offset,endstr)); } Уничтожить cookie еще проще: установите атрибут "время истечения срока действия" на уже прошедшую дату, например: Document.Cookie="FirstName=John; expires=Tuesday, 01-Apr-1994 07:00: EST" Какой должна быть политика Web-сайтов относительно cookies? Понятие "достойный доверия" складывается из многих факторов, одним из которых является за-явление компании, предоставляющей сетевые услуги, в котором четко указано, как они собираются использовать cookies на своих сайтах. Каждый узел, собирающий сведения о своих пользователях, должен выступить с заявлением о том, для чего он использует cookies. Digital Voodoo (фирма, занимающаяся Web-серверами в Остине, штат Техас) использует следующий текст: "Наш Web-сайт применяет cookies, чтобы обеспечить лучшее обслуживание. Мы не собираем частную информацию, пока не проинформируем вас и не получим вашего разрешения на это. Мы не перепродаем и не распространяем никакие сведения о любом посетителе (то есть пользователе) узла, включая информацию, которая может быть собрана как естественный побочный продукт вашего посещения. Если у вас есть какие-либо вопросы по этому поводу, пожалуйста, обращайтесь к нашему Web-мастеру". В широко распространенных опасениях, связанных с cookies, виновата вовсе не технология, а страх, что беспринципные операторы сайтов могут использовать cookies для недопустимых действий. Нет никакого повода бояться или быть настроенным против работника магазина, который помнит, что вы купили твидовый пиджак в прошлом месяце, но никто не хочет иметь дело с продавцом, который припрятывает оттиски кредитных карточек. Четкое заявление компании может доказать, что не следует бояться cookies у честных операторов. Cookies очень помогают, когда вы хотите улучшить качество посещений пользователя. Вы можете сохранять информацию в cookies, что позволит вам предоставлять лучшее, более персонализированное обслуживание при следующем визите пользователя на ваш сайт. Например, если вы предлагаете 2 версии: одна с рамками, а другая без них, то нет нужды каждый раз заставлять пользователя выбирать. Вместо этого вы можете записать его выбор в cookie, и когда он появится в следующий раз, ваш сервер прочтет cookie и автоматически выдаст нужную версию. Cookies особенно полезны в сочетании с динамически генерируемыми страницами. Если ваш сайт поставляет информацию по ряду тем, то вы могли бы использовать cookie, чтобы сохранять сведения о темах, интересующих пользователя. При повторном его приходе на ваш узел вы можете генерировать динамические страницы именно с этими темами. Например, газетный сайт мог заметить, что какой-то посетитель постоянно ищет результаты баскетбольных матчей. Сайт может использовать эту информацию, чтобы в самом начале (вверху) динамически генерировать клиентскую страницу с результатами матчей. Не собирайте "чувствительную" информацию Иногда видимость безопасности так же важна, как и сама безопасность. Например, вы знаете, что информацию, которую вы сберегаете в cookie, невозможно прочесть с других Web-сайтов, однако пользователи могут не понимать этого. Поэтому следует избегать хранения любых сведений, которые даже потенциально смущают пользователя или дороги ему. Cookies не являются местом для отслеживания паролей, например, или номеров кредитных карточек. Первый раз, когда пользователь найдет в cookie номер своей кредитной карточки, будет последним его появлением на вашем сайте. Гораздо лучше хранить "чувствительную" информацию в базе данных сервера. Дайте вашему клиенту идентификационный номер и используйте cookie для его хранения. Затем, при визите клиента, воспользуйтесь этим номером, чтобы просмотреть остальную информацию в базе данных. Главное - доверие. Если вы говорите, что ваш сайт хранит в cookies информацию только для того, чтобы улучшить качество обслуживания посетителей, используйте cookies только для этой цели. Не продавайте имена и электронные адреса абонентов ненадежным лицам и не наводняйте ваших клиентов ненужной рекламой, если вы обещали не делать этого. Перспективы cookies Одним из главных требований при разработке современного ПО является требование максимального удобства и простоты применения для пользователей. Отражением этой тенденции в области компьютерных сетей и являются cookies. Они позволяют существенно облегчить подбор и преобразование к необходимому виду нужной клиенту информации в соответствии с его запросами на основе некоторых персональных сведений, заложенных в базу данных Web-узла. Разумеется, при этом должны быть гарантированы, по согласованию с клиентом, определенные пределы информированности, чтобы обеспечить безопасность и неразглашение важных для пользователя личных данных. Исходя из всего вышеизложенного, можно смело прогнозировать большое будущее для cookies, по-скольку они способны взять на себя значительную часть усилий пользователя по отбору необходимого материала в WWW - самой быстроразвивающейся в настоящее время составной части Internet. А учитывая, что с их помощью Web-сайт может получить доступ к обширной информации о клиенте, такой, например, как адрес его электронной почты, предпочитаемые темы, привычки и т.д., то в перспективе на базе cookies возможно создание интегрированных персональных сред пользователей, которые будут кон-тролировать, существенно ее облегчая, любую их деятельность в компьютерных сетях и не только. Но это уже дело далекого будущего.