#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) )