【问题标题】:web.py session does not work at allweb.py 会话根本不起作用
【发布时间】:2014-04-18 06:04:57
【问题描述】:

我已经尽我所能尝试,但它根本不起作用。问题是 session.get('t_yname') 在我检查会话值时总是返回 None。

这里有详细信息:

  1. 平台:max os x10.9.2
  2. 蟒蛇: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

【问题讨论】:

  • 您能否更具体地描述问题和可能的错误?如果我们不知道什么不起作用,就很难提供帮助
  • 呃,问题是 session.get('t_yname') 在我检查会话值时总是返回 None 。如您所见,我想我已经在 Login 类的 POST 方法中保存了 't_yname' 值。谢谢
  • 我之前尝试过 session.t_yname 而不是 session.get('t_yname'),但结果更糟。我得到了错误:AttributeError:'ThreadedDict'对象没有属性't_yname'

标签: python session web.py


【解决方案1】:

最后我解决了这个问题。我使用 session._initializer['t_yname'] 而不是 session.t_yname。但我不明白,webpy.org 上的文件根本没有提到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多