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

python:在cgi脚本中与会话交互,python,session,cgi,Python,Session,Cgi,python cgi脚本能否向会话写入和读取数据?如果是,怎么做?有高级API吗,或者我必须自己运行类吗?cgi上没有“会话”。如果使用的是原始cgi,则必须滚动自己的会话处理代码 基本上,会话的工作方式是创建一个唯一的cookie编号,并在响应头上将其发送给客户端,然后在每个连接上检查此cookie。将会话数据存储在服务器上的某个位置(内存、数据库、磁盘),并使用cookie号作为密钥,在客户端发出的每个请求中检索会话数据 然而,cgi不是用python开发web应用程序的方式。使用。使用we

python cgi脚本能否向会话写入和读取数据?如果是,怎么做?有高级API吗,或者我必须自己运行类吗?

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

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

然而,
cgi
不是用python开发web应用程序的方式。使用。使用web框架

下面是一个使用的快速示例
cherrypy.tools.sessions
是一种cherrypy工具,可自动处理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)
import cherrypy
类HelloSessionWorld(对象):
@cherrypy.tools.sessions()
def索引(自):
如果cherrypy.session中有“数据”:
return“您有一个cookie!上面写着:%r”%cherrypy.session['data']
其他:
return“您没有饼干…”
index.exposed=True
@cherrypy.tools.sessions()
def getcookie(self):
cherrypy.session['data']='Hello World'
返回“完成,请查看”
getcookie.exposed=True
application=cherrypy.tree.mount(HelloSessionWorld(),“/”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
cherrypy.quickstart(应用程序)

请注意,此代码是一个
wsgi
应用程序,您可以将其发布到任何启用
wsgi
的web服务器(apache已发布)。此外,cherrypy有自己的
wsgi
服务器,因此您可以使用python运行代码,它将开始在我的“低成本”web托管计划中服务,不允许使用wsgi。“mod_wsgi”apache模块无法使用,因为它是共享apache服务器。我正在发展我自己的班级


为了不从零开始,我正在试验一个会话类的实现,该类在这个站点上可用:

+1 for WSGI。。。当然,在此期间,您可以通过CGI部署WSGI。事实上,这可能是一个好主意,因为单进程一次运行方案意味着您不必担心dev服务器上的模块重新加载问题。