有时 request.session.session_key 是 None
Sometimes request.session.session_key is None
从 request.session
获取 session_key 时遇到问题。
我正在使用 Django1.8 和 Python2.7.10 来设置 RESTful 服务。
这是我的登录视图的片段:
user = authenticate(username=userName, password=passWord)
if user is not None:
# the password verified for the user
if user.is_active:
# app_logger.debug("User is valid, active and authenticated")
if hasattr(user, 'parent') :
login(request, user)
request.session['ut'] = 4
# user type 1 means admin, 2 for teacher, 3 for student, 4 for parents
request.session['uid'] = user.id
description = request.POST.get('description','')
request.session['realname'] = user.parent.realname
request.session['pid'] = user.parent.id
devicemanage.update_user_device(devicetoken, user.id, ostype, description)
children = parentmanage.get_children_info(user.parent.id)
session_id = request.session.session_key
user.parent.login_status = True
user.parent.save()
return JsonResponse({'retcode': 0,'notify_setting':{'receive_notify':user.parent.receive_notify,'notify_with_sound':user.parent.notify_with_sound,'notify_sound':user.parent.notify_sound,'notify_shake':user.parent.notify_shake},'pid':user.parent.id,'children':children,'name':user.parent.realname,'sessionid':session_id,'avatar':user.parent.avatar,'coins':user.parent.coins})
现在调用此函数时,我有时会看到 session_id
在响应中是 None
。
所以,在调试之后(我在 return JsonResponse(...)
行设置了断点),我看到当我到达断点时 request.session._session_key
是 None
,但是 request.session.session_key
是 u'j4lhxe8lvk7j4v5cmkfzytyn5235chf1'
而 session_id
也是 None
。
有谁知道这是怎么发生的?为什么在返回响应之前将其分配给 session_id
时未设置 session_key
的值?
根据约翰的建议。
我通过这段代码修复了问题:
if not request.session.session_key:
request.session.save()
session_id = request.session.session_key
SessionStore.create() is designed to create a new session (i.e. one
not loaded from the session store and with session_key=None). save()
is designed to save an existing session (i.e. one loaded from the
session store). Calling save() on a new session may also work but has
a small chance of generating a session_key that collides with an
existing one. create() calls save() and loops until an unused
session_key is generated.
表示使用 create()
比 save()
更安全。所以你可以这样尝试:
if not request.session.session_key:
request.session.create()
session_id = request.session.session_key
从 request.session
获取 session_key 时遇到问题。
我正在使用 Django1.8 和 Python2.7.10 来设置 RESTful 服务。
这是我的登录视图的片段:
user = authenticate(username=userName, password=passWord)
if user is not None:
# the password verified for the user
if user.is_active:
# app_logger.debug("User is valid, active and authenticated")
if hasattr(user, 'parent') :
login(request, user)
request.session['ut'] = 4
# user type 1 means admin, 2 for teacher, 3 for student, 4 for parents
request.session['uid'] = user.id
description = request.POST.get('description','')
request.session['realname'] = user.parent.realname
request.session['pid'] = user.parent.id
devicemanage.update_user_device(devicetoken, user.id, ostype, description)
children = parentmanage.get_children_info(user.parent.id)
session_id = request.session.session_key
user.parent.login_status = True
user.parent.save()
return JsonResponse({'retcode': 0,'notify_setting':{'receive_notify':user.parent.receive_notify,'notify_with_sound':user.parent.notify_with_sound,'notify_sound':user.parent.notify_sound,'notify_shake':user.parent.notify_shake},'pid':user.parent.id,'children':children,'name':user.parent.realname,'sessionid':session_id,'avatar':user.parent.avatar,'coins':user.parent.coins})
现在调用此函数时,我有时会看到 session_id
在响应中是 None
。
所以,在调试之后(我在 return JsonResponse(...)
行设置了断点),我看到当我到达断点时 request.session._session_key
是 None
,但是 request.session.session_key
是 u'j4lhxe8lvk7j4v5cmkfzytyn5235chf1'
而 session_id
也是 None
。
有谁知道这是怎么发生的?为什么在返回响应之前将其分配给 session_id
时未设置 session_key
的值?
根据约翰的建议。
我通过这段代码修复了问题:
if not request.session.session_key:
request.session.save()
session_id = request.session.session_key
SessionStore.create() is designed to create a new session (i.e. one not loaded from the session store and with session_key=None). save() is designed to save an existing session (i.e. one loaded from the session store). Calling save() on a new session may also work but has a small chance of generating a session_key that collides with an existing one. create() calls save() and loops until an unused session_key is generated.
表示使用 create()
比 save()
更安全。所以你可以这样尝试:
if not request.session.session_key:
request.session.create()
session_id = request.session.session_key