无法在python CGI中从浏览器检索cookie

时间:2019-07-17 15:54:20

标签: python python-3.x http cookies cgi

我有一个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[]>"

0 个答案:

没有答案