我有一个使用CGI在python中编写的网站。直到最近,当规模能力变得重要时,这才是很好的。
我决定使用mod_python,因为它非常简单。我的网站的大多数功能都存储在python模块中,我调用它来呈现各种页面。其中一个CGI脚本可能如下所示:
#!/usr/bin/python
import mysite
mysite.init()
mysite.foo_page()
mysite.close()
在mysite中,我可能会有这样的事情:
def get_username():
cookie = Cookie.SimpleCookie(os.environ.get("HTTP_COOKIE",""))
sessionid = cookie['sessionid'].value
ip = os.environ['REMOTE_ADDR']
username = select username from sessions where ip = %foo and session = %bar
return(username)
获取当前用户的用户名。问题是,当os被导入脚本时(在模块的顶部),这取决于os.envrion的填充。因为我现在使用的是mod_python,所以解释器只加载一次这个模块,并且只填充一次。我无法读取cookie,因为它的os具有本地机器的环境变量,而不是远程用户。
我确信有办法解决这个问题,但我不确定它是什么。我尝试在get_username函数中重新导入os,但没有骰子:(。
有什么想法吗?
答案 0 :(得分:0)
您使用的是哪个版本的mod_python? Mod_python 3.x包含一个单独的Cookie
类,以使其更容易(请参阅here)
在早期版本IIRC中,您可以在请求对象的headers_in
成员中获取传入的cookie。