我正在尝试使用python的Cookie将cookie添加到网页,所以我有:
def cookie():
#create cookie1 and cookie2 here using Cookie.SimpleCookie()
print cookie1
print cookie2
print "Content-Type: text/html"
print
cookie()
try:
cookie= Cookie.SimpleCookie(os.environ["HTTP_COOKIE"])
user= cookie["user"].value
print user
except (Cookie.CookieError, KeyError):
print 'no cookie'
page= open('example.html', 'r').read()
print page
现在问题是cookie1和cookie2打印在页面本身中,并且可以在脚本运行时看到。因此,cookie不会保存,并且打印时除了'no cookie'。我做错了什么?
答案 0 :(得分:2)
1-你的代码没有意义。 cookie1和cookie2未在第一个函数中定义。
2-看起来你正在尝试使用旧的cgi库来打印东西,在那里你做标题,空白行,然后是页面内容。 Cookie也由Web服务器作为HTTP标头发送,并由浏览器作为HTTP标头发送回来。它们不会出现在网页上。所以你需要在空白行之前有“set-cookie”数据。
除非你必须使用CGI模块,否则我会研究其他解决方案。 CGI基本上已经死了 - 这是一个旧的,有限的标准;配置服务器可能是一个很大的麻烦;表现从来都不是很好;还有更好的选择。
使用Python的大多数(如果不是全部)现代Web开发使用WSGI协议。 (How Python web frameworks, WSGI and CGI fit together,http://www.python.org/dev/peps/pep-0333/)
Flask和Bottle是两个非常简单的WSGI框架。 (Pryamid和Django是两个更先进的)。除了大量非常重要的功能之外,它们还允许您在框架将有效负载传递到服务器之前轻松指定HTML响应和与其一起使用的HTTP标头(包括cookie)。这个
http://flask.pocoo.org/docs/quickstart/
http://bottlepy.org/docs/dev/tutorial.html
如果我不得不使用cgi,我可能会这样做:(伪代码)
def setup_cookie():
# try/except to read the cookie
return cookie
def headers(cookie):
# print a set-cookie header if needed
return "SetCookie: etc"
def page_content(cookie):
# maybe you want to alter the page content with a regex or something based on the cookie value
return html
cookie = setup_cookie()
print headers( cookie )
print ""
print page_content( cookie )
请记住 - 使用旧的cgi标准,您打印标题而不是html - 这意味着如果您的内容生成影响标题值(如cookie),您需要能够在“打印”之前覆盖它。