【问题标题】:Adding cookie to webpage, with python CGI使用python CGI将cookie添加到网页
【发布时间】:2012-10-07 19:44:18
【问题描述】:

我正在尝试使用 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没有保存,并且打印了except中的'no cookie'。我做错了什么?

【问题讨论】:

  • 我认为您可能需要在打印空行之前打印 cookie(因此将调用 cookie() 与上面一行的 print 交换),但我不肯定如果我没记错的话。
  • 是的,你是对的!谢谢。

标签: python cookies cgi


【解决方案1】:

1- 你的代码没有意义。 cookie1 和 cookie2 没有在第一个函数中定义。

2- 看起来您正在尝试使用旧的 cgi 库打印内容,您在其中执行标题、空白行,然后是页面内容。 Cookie 也由 Web 服务器作为 HTTP 标头发送,并由浏览器作为 HTTP 标头发送回。它们不会出现在网页上。所以你需要在空行之前有“set-cookie”数据。

除非您必须使用 CGI 模块,否则我会研究其他解决方案。 CGI 基本上已经死了——它是一个旧的、限制性的、标准的;配置服务器可能很麻烦;表现从来都不是很好;还有更好的选择。

大多数(如果不是全部)使用 Python 进行的现代 Web 开发都使用 WSGI 协议。 (How Python web frameworks, WSGI and CGI fit togetherhttp://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),您需要能够在“打印”之前覆盖它。

【讨论】:

  • 啊,就是这样!我需要在打印空行之前打印 cookie。谢谢,我会看看 WSGI。
猜你喜欢
  • 2011-09-01
  • 2011-06-08
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多