python cgi脚本可以向会话写入和读取数据吗?如果是这样的话?是否有高级API或者我必须自己编写类吗?
答案 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