使用变量而不是会话对象

时间:2013-12-29 20:52:36

标签: python web.py

有人可以告诉我

之间的区别
urls = (
    "/count", "count",
    "/reset", "reset")
app = web.application(urls, locals())
store = web.session.DiskStore('sessions')
session = web.session.Session(app, store, initializer={'count': 0})
class count:
    def GET(self):
        session.count += 1
        return str(session.count)
class reset:
    def GET(self):
        session.kill()
        return ""
if __name__ == "__main__":
    app.run()

urls = (
    "/count", "count",
    "/reset", "reset")
app = web.application(urls, locals())
class count:
    counting = 0
    def GET(self):
        count.counting += 1
        return str(count.counting)
class reset:
    def GET(self):
        count.counting = 0
        return ""
if __name__ == "__main__":
    app.run()

就我所知,他们的输出完全相同。如果没有区别那么使用Session对象比这样的变量有什么好处呢?

我是Python的新手,并且通过Zed Shaw的艰难学习Python。我正在练习52,当这个问题突然出现在我脑海中时,他会介绍会话。

2 个答案:

答案 0 :(得分:1)

在第二个实例中,连接到您的应用程序的所有浏览器共享一个计数器。首先,每个浏览器根据自己的会话计算。

而且,正如kubked指出的那样,计数器在第一个实例中持久保存在磁盘上。

参考:http://webpy.org/cookbook/sessions

答案 1 :(得分:0)

据我所见,https://gitorious.org/lpthw-web/lpthw-web/source/b1ab4df58746c5d4e3dfb41e502a8192caec3ef1:web/session.py DiskStore会话将会话保存在文件系统中。如果服务器崩溃,您可以再次运行它并打开会话仍将存储。将数据保存在变量中,这意味着它将存储在RAM中,服务器崩溃会导致数据丢失。

当您决定使用线程时,保持会话中的用户数据也会更好。