我有一个python CGI脚本,通过它我可以设置cookie(通过使用SimpleCookie()库)并执行其他功能,例如将响应发送回html页面。
我无法检索在浏览器中设置的cookie。下面是我的代码。
#!/usr/bin/python3
import cgi
import cgitb
from pymongo import MongoClient
from bson.json_util import dumps
import json
from http import cookies
import datetime
import uuid
import os
cgitb.enable(display=0, logdir="/tmp/superBowl/")
form = cgi.FieldStorage()
client = MongoClient('localhost', 2017)
db = client['Superbowl']
users = db['users']
username = form.getvalue('name')
password = form.getvalue('password')
if (users.find_one({'username': username, 'password': password})is not None):
userInfo = json.loads(dumps(users.find_one({"username": username})))
users.find_one_and_update({"username": username}, {"$set": {"loggedIn": "true"}})
expires = datetime.datetime.utcnow() + datetime.timedelta(hours=6)
C = cookies.SimpleCookie()
C["session"] = str(uuid.uuid4())
C["session"]['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
print(C.output(attrs=None, header='Set-Cookie:', sep='\r\n'))
print ('Content-Type: application/json\n\n')
#getting cookie
if 'HTTP_COOKIE' in os.environ:
cookies = os.environ['HTTP_COOKIE']
#print(json.dumps(cookies))
#cookies = cookies.split('; ')
# for cookie in cookies:
# cookie = cookie.split('=')
# handler[cookie[0]] = cookie[1]
#print(json.dumps(handler))
print(cookies)
else:
print("no cookies")
#print (dumps(users.find_one({"username": username})))
else:
print ('Content-Type: application/json\n\n')
print (dumps({"username": "404"}))
#print("You are unregistered !")
print语句在chrome的Network中打印响应,我希望至少看到设置了哪些cookie。
它确实打印了session = 一些我未设置的uuid值“,但只打印了一次。在进一步调试后,甚至停止打印了。
我认为实际上"HTTP_COOKIE"
中尚未设置os.environ
。
P.S。现在看来cookie并不是每次都被检索到,我将不得不刷新几次,然后才能被检索到。还返回的uuid与我设置的uuid不同。
P.P.S我已经使用了请求库,并且它返回空的"<RequestsCookieJar[]>"