2

好的,我的代码如下。我正在使用 apache2、mod_wsgi、烧杯、python

def application(environ, start_response):
    session = environ['beaker.session']
    if not session.has_key('value'):
        session['value'] = 0
    session.save()
    try:
        s = session['value']
    except:
        s = "value not found"
    start_response('200 OK', [('Content-type', 'text/html')])
    #response = "<br />".join(environ)
    beaker = "<br />".join(session)
    try:
        cookie = "".join(environ['HTTP_COOKIE'])
    except:
        cookie = ""
    return [cookie,'<br />', str(s), '<br />', beaker, '<br /> accessed:', 
str(session['_accessed_time']), '<br /> creation:', 
str(session['_creation_time'])]

from beaker.middleware import SessionMiddleware

application = SessionMiddleware(
    application,
    key='mysession',
    secret='blah',
)

当我访问 localhost/file.wsgi 之类的网页时,我将设置 session['value'] 并将其打印出来,正如您从我返回的内容中看到的那样。但是,说在我设置 session['value'] 并决定注释掉程序的以下部分之后,

    #if not session.has_key('value'):
     #   session['value'] = 0
    #session.save()

保存它,然后转到 localhost/file.wsgi。我期待变量 s,即 =session['value'],得到我之前设置的值。当我在更改并保存文件后 5-15 秒后转到 localhost/file.wsgi 时,会话中不再有“值”键,显然它不再具有值。显然,访问时间也会发生变化,但创建时间也会发生变化(每次刷新后都会发生变化)。

注意:我也尝试替换部分程序,我在上面注释掉的部分,用

    if not session.has_key('value'):
        session['value'] = 0
    session['value'] += 1
    session.save()

在我更改并访问 localhost/file.wsgi 后发生的事情是 session['value'] 会增加(预期),但随后它会突然跳转并在 0 处创建一个新 session['value'] 并再次增加,基本上这会创建多个会话['value'],但会话令牌'mysession'将保持不变。此外,每隔几次刷新,该值就会跳回另一个会话 ['value'] 并停留在那里,然后跳转到另一个会话 ['value']。

我对正在发生的事情感到非常困惑,为什么我设置的 session['value'] 没有保持不变,为什么创建时间不断变化,为什么会有多个创建,为什么会话会跳来跳去?

顺便说一句,这在 chrome 和 firefox 上都是一样的。

我在 ubuntu 10.10、python 2.6 上,我假设烧杯、apache2、mod_wsgi 的最新版本或最新版本。

是我的编程问题,apache2 配置错误,没有正确使用烧杯,什么?

非常感谢你们。

4

0 回答 0