web.py 会话完全无法工作
我已经尽力尝试所有方法,但就是不管用。问题是,当我检查会话值时,session.get('t_yname')总是返回None。
详细信息如下:
- 平台:mac os x10.9.2
- Python版本: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
1 个回答
1
最后我解决了这个问题。我用 session._initializer['t_yname'] 代替了 session.t_yname。不过我不太明白,webpy.org 上的文档根本没有提到这一点。