据我所知example 创建使用会话的小webapp。这有效,但我认为会话有问题 它不起作用,因为在我的浏览器中,我总是在获取/计数页面时看到1,尽管它应该 每次请求页面时都会递增。 此外,我尝试使用DBStore而不是DiskStore,但得到了相同的结果。
你有没有猜测为什么会话不起作用? 也许我总是在请求/计数页面时获得新会话?
我使用的是ubuntu 12.04,webpy 0.36,mod_wsgi 4.2 这是代码,apache config和error.log:
import web
import os
urls = (
'/count', 'count',
'/reset', 'reset'
)
web.config.debug = False
app = web.application(urls, globals(), autoreload=False)
curdir = os.path.dirname(__file__)
session = web.session.Session(app,
web.session.DiskStore(os.path.join(curdir,'sessions')),initializer = {'count': 0})
application = app.wsgifunc()
class count:
def GET(self):
session.count += 1
return str(session.count)
class reset:
def GET(self):
session.kill()
return ""
---- apache config ------
<VirtualHost *:8080>
DocumentRoot /var/www/webpy-app/documents
AddType text/html .py
<Directory /var/www/webpy-app/documents>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /var/www/webpy-app/code.py/
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
另外,我注意到在我请求/计数页面时没有创建/ session中的会话文件,尽管它们应该是。
答案 0 :(得分:1)
您可能还需要在会话代码之前添加Cookie路径。
像这样:
web.config.session_parameters['cookie_path'] = '/
“
然后:
session = web.session.Session(app, web.session.DiskStore(os.path.join(curdir,'sessions')),initializer = {'count': 0})
不确定为什么这不在文档中,但它应该有用。
答案 1 :(得分:0)
您的Apache / mod_wsgi配置意味着您的Web应用程序将是多进程的,因此每次请求可能会进入不同的进程。请改用mod_wsgi守护进程模式,确保只有一个进程(守护进程模式的默认值)。
Apache / mod_wsgi进程也将作为特殊用户运行,并且可能无法对您为会话文件指定的目录具有写访问权。