Книга: Программирование на языке Ruby

19.1.3. Куки

19.1.3. Куки

Мы уже упоминали, что HTTP — протокол без состояния. Это означает, что после того как сервер закончил обрабатывать запрос, он не может сказать, пришел ли следующий запрос от того же или какого-либо другого браузера. Тут-то и приходят на помощь куки (cookies) — способ, быть может, несколько грубоватый, сохранить состояние между последовательными запросами от одного и того же браузера.

Механизм куков работает следующим образом. Сервер посылает браузеру команду (в виде HTTP-заголовка) с просьбой сохранить пару имя-значение. Данные могут храниться в памяти или на диске. При каждом последующем запросе к любому серверу из домена, указанного в куке, браузер пошлет сохраненные данные в HTTP-заголовке.

Можно, конечно, читать и формировать куки вручную, но, как вы, наверное, догадались, в этом нет необходимости, поскольку библиотека CGI предоставляет класс Cookie, который инкапсулирует все технические детали.

require "cgi"
lastacc = CGI::Cookie.new("kabhi",
 "lastaccess=#{Time.now.to_s}")
cgi = CGI.new("html3")
if cgi.cookies.size < 1
 cgi.out("cookie" => lastacc) do
  "Hit refresh for a lovely cookie"
 end
else
 cgi.out("cookie" => lastacc) do
  cgi.html do
   "Hi, you were last here at: "+
   "#{cgi.cookies['kabhi'].join.split(' = ')[1]}"
  end
 end
end

Здесь создается кук "kabhi", ключ которого "lastaccess" содержит текущее время. Если у браузера уже был такой кук, то выводится его значение. Куки хранятся в хэше, который является переменной экземпляра в классе CGI. Каждый кук может содержать несколько пар ключ-значение, поэтому при доступе к куку по имени вы получаете массив.

Оглавление книги


Генерация: 0.691. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз