Как использовать файлы cookie импорта http для создания SimpleCookie Python3

#python #python-3.x #cookies #cgi #session-cookies

Вопрос:

Я хотел бы спросить, как использовать SimpleCookie (), который является стандартом для обработки файлов cookie в Python3?

     simple_cookie = cookies.SimpleCookie()
    simple_cookie['SESSION'] = session_val
 

Ответ №1:

Хорошо, сначала получите импорт

 from datetime import datetime, timedelta
import pytz
from http import cookies
eastern = pytz.timezone('US/Eastern') # use your current timezone
 

Далее, код Python3 для инициализации файла cookie, дата и время от текущего часового пояса до GMT и домен

 def convert_datetime_est_to_utc(date_time_dt):
    expires = date_time_dt.replace(tzinfo=eastern).astimezone(pytz.utc)
    return expires.strftime('%a, %d %b %Y %H:%M:%S GMT') # GMT/UTC

domain = os.environ['HTTP_HOST'].lower()
domain = domain.replace('www.', '')

now = datetime.now()
date_time_dt = now   timedelta(days=2) # a cookie that lasts for 2 days

simple_cookie = cookies.SimpleCookie()
simple_cookie['SESSION'] = session_val # should be a random string that is distinct for each user of a website
simple_cookie['SESSION']['expires'] = convert_datetime_est_to_utc(date_time_dt)
simple_cookie['SESSION']['path'] = '/'
simple_cookie['SESSION']['comment'] = 'This is the website description'
simple_cookie['SESSION']['domain'] = f""".{domain}"""
simple_cookie['SESSION']['max-age'] = str(60*60*24*2)
simple_cookie['SESSION']['secure'] = True
simple_cookie['SESSION']['samesite'] = 'None'
 

Наконец, выведите файл cookie

 simple_cookie.output()
 

Например, для Python3 cgi выведите текст в юникоде и выведите файл cookie сеанса

 def enc_print(string='', encoding='utf8'):
    sys.stdout.buffer.write(string.encode(encoding)   b'n') # for unicode output Python cgi

enc_print( simple_cookie.output() )
enc_print("Content-Type:text/html;charset=utf-8;")
enc_print()
enc_print(html)
 

Последнее примечание: я создаю свой session_val с помощью PostgreSQL, ВЫБИРАЮ uuid_generate_v1() и ВЫБИРАЮ операторы uuid_generate_v4 (), например, uuid_session = uuid_v1 ‘_’ uuid_v4, а затем проверяю в базе данных, что он отличается, но вы также можете использовать использовать Python3 random

 import random

def password(length=11):
  
  #chars = string.ascii_uppercase   string.ascii_lowercase   string.digits   '!@#$%^amp;*() '
  chars = string.ascii_uppercase   string.ascii_lowercase   string.digits
  pwd = ''.join(random.choice(chars) for x in range(length))
  return pwd[:length]

print( password(50) )