Python:在CGI脚本中与会话交互
Python的CGI脚本可以读写会话数据吗?如果可以的话,怎么做呢?有没有简单的接口可以用,还是说我得自己写类来实现?
2 个回答
1
我的“低成本”网站托管计划不允许使用wsgi。因为是共享的apache服务器,所以不能使用'mod_wsgi'这个apache模块。我正在开发我自己的类。
为了不从头开始,我正在尝试实现这个网站上提供的一个会话类:http://cgi.tutorial.codepoint.net/a-session-class
8
在 cgi
中没有“会话”这个概念。如果你使用原始的 cgi
,你需要自己写代码来处理会话。
简单来说,会话的工作原理是创建一个独特的 cookie 编号,并将其通过响应头发送给客户端,然后在每次连接时检查这个 cookie。你需要在服务器上某个地方存储会话数据(可以是内存、数据库或磁盘),并用这个 cookie 编号作为钥匙,在客户端每次请求时取出相应的数据。
不过,cgi
并不是用 Python 开发网页应用的好方法。你应该使用 wsgi
,并选择一个网页框架。
下面是一个使用 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
的网络服务器上(比如 Apache 有 mod_wsgi
)。此外,cherrypy 也有自己的 wsgi
服务器,所以你只需用 Python 运行这段代码,它就会在 http://localhost:8080/
上提供服务。