似乎 web.py 会话在应用程序中而不是在客户端中

seems like web.py sessions are in app rather than on client

所以下面的代码或多或少来自http://webpy.org/cookbook/session

如果我 运行 该应用程序正常工作,即每次刷新时计数器递增 1,但是如果我在隐身 window 或其他网络浏览器中访问该应用程序,计数器会不重置。在我看来,会话似乎没有像应该的那样用 count: 0 初始化。是什么导致新会话采用其他客户端中会话的值?

import web
web.config.debug = False
urls = (
    "/", "count",
    "/reset", "reset"
)
app = web.application(urls, locals())
session = web.session.Session(app, web.session.DiskStore('sessions'), 
{'count': 0})
session_data = session._initializer


class count:
    def GET(self):
        session_data['count'] += 1
        return str(session_data['count'])

class reset:
    def GET(self):
        session.kill()
        return ""

if __name__ == "__main__":
    app.run()

会话应该存储在客户端上,但是当我执行这段代码时,它似乎在服务器上,这意味着只有一个用户可以使用该应用程序,我必须重新运行该应用程序重置计数器。

我已经将近一个星期没能解决这个问题了。请帮忙。

该示例具有从初始 session 变量创建的会话。例如,session.count += 1 会将当前 sessioncount 加 1。在您的代码中,您为每个用户更改 session_data。文档演示使用初始值设定项创建会话变量的方式是:

session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0})

因此,文档建议不要执行 session_data['count'] += 1,而是执行 session['count'] += 1session.count += 1。您还需要更新 Index.

中的 return

我测试并确认这对我有用。