【发布时间】:2014-04-18 06:04:57
【问题描述】:
我已经尽我所能尝试,但它根本不起作用。问题是 session.get('t_yname') 在我检查会话值时总是返回 None。
这里有详细信息:
- 平台:max os x10.9.2
- 蟒蛇:2.7.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'