【发布时间】:2021-11-16 11:12:15
【问题描述】:
请问如何使用Python3中cookie管理处理标准的SimpleCookie()?
simple_cookie = cookies.SimpleCookie()
simple_cookie['SESSION'] = session_val
【问题讨论】:
标签: python python-3.x cookies cgi session-cookies
请问如何使用Python3中cookie管理处理标准的SimpleCookie()?
simple_cookie = cookies.SimpleCookie()
simple_cookie['SESSION'] = session_val
【问题讨论】:
标签: python python-3.x cookies cgi session-cookies
好的,首先获取导入
from datetime import datetime, timedelta
import pytz
from http import cookies
eastern = pytz.timezone('US/Eastern') # use your current timezone
接下来是初始化 cookie 的 Python3 代码、从当前时区到 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 输出 unicode 文本并输出 session 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)
最后说明,我使用 PostgreSQL SELECT uuid_generate_v1() 和 SELECT uuid_generate_v4() 语句生成我的 session_val,例如 uuid_session = uuid_v1 + '_' + uuid_v4 然后在数据库中检查它是不同的,但你可以使用Python3也随机
import random
def password(length=11):
#chars = string.ascii_uppercase + string.ascii_lowercase + string.digits + '!@#$%^&*()+'
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) )
【讨论】: