Sie*_*cje 17 django django-sessions python-2.7
我试图清除所有会话变量但不注销当前用户.
user = request.session.get('member_id', None)
request.session.flush()
request.session.modified = True
request.session['member_id'] = user
request.session.modified = True
Run Code Online (Sandbox Code Playgroud)
这还会影响网站的其他用户吗?
sha*_*ker 18
从Django 1.8开始,任何调用flush()都会注销用户.来自文档:
在Django 1.8中更改:删除会话cookie是Django 1.8中的新行为.以前,行为是重新生成在cookie中发送回用户的会话密钥值.
如果您希望能够删除密钥但保持用户登录,则需要手动处理:
for key in request.session.keys():
del request.session[key]
Run Code Online (Sandbox Code Playgroud)
或者只删除关注的特定键:
del request.session['mykey']
Run Code Online (Sandbox Code Playgroud)
Nge*_*tor 14
在django <1.8的版本中,session.flush删除会话数据并重新生成会话密钥.它不会影响其他用户,因为会话密钥是唯一的.
您可以清除在 django 会话中设置的密钥,但要在不注销用户的情况下执行此操作需要一点技巧;request.session.flush()将用户注销。并且request.session = {} 在删除会话字典中的所有键时也会将用户注销。
因此,要在不注销用户的情况下清除键,您必须避免以下划线字符开头的键。下面的代码可以解决这个问题:
for key in list(request.session.keys()):
if not key.startswith("_"): # skip keys set by the django system
del request.session[key]
Run Code Online (Sandbox Code Playgroud)
小智 5
作为对Python 2.x 中shacker 1的改进,dict.keys()它返回字典键的列表副本,而在 Python 3.x 中,它返回一个迭代器。改变迭代器的大小是不明智的。对于版本安全的实现强制转换到列表将防止任何大小问题
for key in list(request.session.keys()):
del request.session[key]
Run Code Online (Sandbox Code Playgroud)
我之前的回答建议使用dict.viewkeys()但它也会在 python 3.x 中返回一个迭代器。
| 归档时间: |
|
| 查看次数: |
29897 次 |
| 最近记录: |