web.py 会话完全无法工作

1 投票
1 回答
1281 浏览
提问于 2025-04-18 03:14

我已经尽力尝试所有方法,但就是不管用。问题是,当我检查会话值时,session.get('t_yname')总是返回None。

详细信息如下:

  1. 平台:mac os x10.9.2
  2. Python版本:2.7.3
  3. web.py:最新发布版本是0.37

请帮帮我。

我尝试了两种方式来创建会话对象:

1. 使用本地磁盘创建会话:

global session
app = web.application(urls, globals())
if web.config.get('_session') is None:
    session = web.session.Session(app,web.session.DiskStore('sessions'),initializer=  {'t_yname': '', 't_auth':0})
    web.config._session = session
else: 
    session = web.config._session

2. 使用数据库:

global session
app = web.application(urls, globals())

if web.config.get('_session') is None:
    store = web.session.DBStore(model.db, 'sessions')
    session = web.session.Session(app, store)
    web.config._session = session
else: 
    session = web.config._session

还有一些其他代码:

用户登录时设置会话值(按预期工作):

class Login:
    def GET(self):
        return render.login()
    def POST(self):
        name=web.input(name='').name
        passwd=web.input(passwd='').passwd
        if name=='' or passwd=='':
            raise web.seeother("/login")
        ep=str(hashlib.md5(passwd).hexdigest().lower())
        for user in t_globals['users'][:]:
            if name==str(user.name) and ep==str(user.passwd):
                session.t_auth=int(user.auth)
                session.t_yname=str(user.name)
                print "setted:" + session.get('t_yname')   ### work as expected here
                raise web.seeother("/")

        raise web.seeother("/login")

通过读取会话值检查登录状态(不工作):

def check_login():
    login=False
    sname = session.get('t_yname')    ## always None
    print sname
    if sname is not None and sname != "":
        for user in t_globals['users'][:]:
            if str(user.name)==sname:
                login=True
        if login == False:
            session.t_yname=''
    return login

1 个回答

1

最后我解决了这个问题。我用 session._initializer['t_yname'] 代替了 session.t_yname。不过我不太明白,webpy.org 上的文档根本没有提到这一点。

撰写回答