Чтобы помочь совместить все детали, описанные выше, в примере 15.16 приводится CGI-сценарий, который сохраняет cookies на стороне клиента при первом посещении и принимает и отображает его содержимое при последующих посещениях.
Пример 15.16. PP4E\Internet\Web\cgi-bin\cookies.py
создает или использует имя пользователя, сохраненное в cookies на стороне клиента; в этом примере отсутствуют данные, получаемые из формы ввода
import http.cookies, os
cookstr = os.environ.get("HTTP_COOKIE")
cookies = http.cookies.SimpleCookie(cookstr)
usercook = cookies.get("user") # извлечь, если был отправлен
if usercook == None: # создать при первом посещении
cookies = http.cookies.SimpleCookie() # вывести заголовок Set-cookie
cookies[‘user’] = ‘Brian’ print(cookies)
greeting = ‘<p>His name shall be… %s</p>’ % cookies[‘user’] else:
greeting = ‘<p>Welcome back, %s</p>’ % usercook.value
print(‘Content-type: text/html\n’) # плюс пустая строка
print(greeting) # и фактическая разметка html
Если предположить, что вы используете локальный веб-сервер, представленный в примере 15.1, этот сценарий можно вызвать по адресу URL http://localhost/cgi-bin/cookies.py (введите его в адресной строке своего броузера или откройте его в интерактивном сеансе с помощью модуля urllib.request). При первом обращении к этому сценарию он установит cookies в заголовках ответа, и вы увидите в окне броузера такое сообщение:
His name shall be… Set-Cookie: user=Brian
Затем при повторном обращении по этому же адресу URL сценария в том же самом сеансе работы с броузером (воспользуйтесь кнопкой Обновить (Reload)) страница ответа будет содержать следующее сообщение:
Welcome back, Brian
Это объясняется тем, что при повторном обращении к сценарию клиент отправляет сохраненные ранее значения cookies обратно сценарию, по крайней мере, пока вы не закроете броузер и не перезапустите его вновь — по умолчанию срок действия cookies ограничивается продолжительностью сеанса работы с броузером. В реальных обстоятельствах такая схема может использоваться страницей входа в веб-приложение — пользователю достаточно будет пройти процедуру входа только один раз в течение одного сеанса работы с броузером.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011