webpy + apache中的会话不起作用

时间:2014-08-06 13:08:14

标签: python apache mod-wsgi web.py

据我所知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中的会话文件,尽管它们应该是。

2 个答案:

答案 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进程也将作为特殊用户运行,并且可能无法对您为会话文件指定的目录具有写访问权。