Обработка файлов cookie на HTTP-сервере

Это мой первый пост на этом сайте, но я часто захожу на него. Я застрял в проекте, я пишу для удовольствия. Я новичок в Perl, так что будьте спокойны со мной. Я успешно написал веб-сервер на Perl, он анализирует PHP и обрабатывает несколько соединений.

Пока все хорошо, но я застрял при отправке куки в браузер.

Я полагаю, я не понимаю, как мой сервер должен анализировать вывод документа (от чтения файла до отправки по HTTP) перед отправкой для файлов cookie. Я искал несколько дней и пришел пустой. Вероятно, я слишком усложняю это, но как мне узнать, какое значение ключа запрашивается в документе?

Поиск только по страницам страниц, разбирающих документы из Интернета, используя HTTP::Cookies это не то, что я ищу. Что происходит на стороне сервера для анализа локального документа на предмет "Set-Cookie:" перед отправкой заголовков?

я пробовал HTTP::Cookies->extract_cookies($my_local_file), но он отвечает обратно

"Не удается найти метод объекта"_header"через пакет..."

что имеет смысл, поскольку заголовочные файлы никогда не отправлялись, поскольку это происходило на стороне сервера.

2 ответа

Решение

Вы неправильно понимаете, как работают куки. Они указываются сервером и хранятся на клиенте, поэтому этот вопрос не имеет смысла

Я полагаю, я не понимаю, как мой сервер должен анализировать вывод документа (от чтения файла до отправки по HTTP) перед отправкой для файлов cookie.

Вероятно, я слишком усложняю это, но как мне узнать, какое значение ключа запрашивается в документе?

Что происходит на стороне сервера для анализа локального документа на предмет "Set-Cookie:" перед отправкой заголовков?

Сервер не "отправляет файлы cookie". Когда сервер получает HTTP-запрос от клиента, он создает и отправляет ответ, содержащий информацию, запрошенную клиентом. Этот ответ может включать Set-Cookie заголовки, чтобы поручить клиенту сохранить некоторую информацию

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

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

Set-Cookie: localtime=2016-05-18T09:01:16
Set-Cookie: username=Keith

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

Set-Cookie: session_id=76151387

Этот метод также повышает безопасность, так как в сообщениях HTTP отображается только идентификатор сеанса, а все реальные данные хранятся вне сервера на сервере.

Как только клиент получит ответ, он сохранит куки-файлы любым удобным для них способом, чтобы их можно было извлечь и вернуть, если следующий запрос будет отправлен на тот же адрес хоста. Он будет просто включать копию данных из предыдущего ответа, как это

Cookie: localtime=2016-05-18T09:01:16; username=Keith

или же

Cookie: session_id=76151387

Существуют варианты этой основной идеи; например, сервер может указать Expires или Max-Age поле, которое указывает, когда клиент должен удалить куки. Предположим, сервер отправляет

Set-Cookie: session_id=76151387; Max-Age=86400

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

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

Когда браузер отправляет запрос на веб-сервер, заголовок может содержать строку cookie. Это веб-браузер, который представляет файлы cookie на веб-сервер вместе с веб-запросом. Запрос может выглядеть так:

GET /index.html HTTP/1.1
Host: YourURL.com
Cookie: key=value; key=value; key=value

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

HTTP:: Server:: Simple - это встроенная библиотека CPAN, которая предоставляет полнофункциональный веб-сервер, если вы не хотите изобретать велосипед.

Другие вопросы по тегам