python:在cgi脚本中与会话交互

时间:2009-10-12 12:21:39

标签: python session cgi

python cgi脚本可以向会话写入和读取数据吗?如果是这样的话?是否有高级API或者我必须自己编写类吗?

2 个答案:

答案 0 :(得分:7)

cgi上没有“会话”。如果您使用的是原始cgi,则必须滚动自己的会话处理代码。

基本上,会话通过创建唯一的cookie编号并将其在响应头上发送到客户端,然后在每个连接上检查此cookie来工作。将会话数据存储在服务器(内存,数据库,磁盘)的某个位置,并使用cookie编号作为密钥,以便在客户端发出的每个请求中检索它。

但是cgi不是如何在python中为Web开发应用程序的。使用wsgi。使用Web框架。

以下是使用cherrypy的快速示例。 cherrypy.tools.sessions是一个可以自动处理cookie设置/检索和与数据关联的工具:

import cherrypy

class HelloSessionWorld(object):
    @cherrypy.tools.sessions()
    def index(self):
        if 'data' in cherrypy.session:
            return "You have a cookie! It says: %r" % cherrypy.session['data']
        else:
            return "You don't have a cookie. <a href='getcookie'>Get one</a>."
    index.exposed = True

    @cherrypy.tools.sessions()
    def getcookie(self):
        cherrypy.session['data'] = 'Hello World'
        return "Done. Please <a href='..'>return</a> to see it"
    getcookie.exposed = True

application = cherrypy.tree.mount(HelloSessionWorld(), '/')

if __name__ == '__main__':
    cherrypy.quickstart(application)

请注意,此代码是wsgi应用程序,因为您可以将其发布到任何启用了wsgi的Web服务器(apache具有mod_wsgi)。另外,cherrypy有自己的wsgi服务器,因此您可以使用python运行代码,它将开始在http://localhost:8080/上提供

答案 1 :(得分:1)

我的“低成本”网络托管计划不允许使用 wsgi 。无法使用'mod_wsgi'apache模块,因为它是共享的apache服务器。我正在开发自己的课程。

为了不从零开始,我正在尝试在此网站中提供的会话类的实现:http://cgi.tutorial.codepoint.net/a-session-class