18

すべてのセッション変数をクリアしようとしていますが、現在のユーザーをログアウトしません。

user = request.session.get('member_id', None)
request.session.flush()
request.session.modified = True
request.session['member_id'] = user
request.session.modified = True

これはサイトの他のユーザーにも影響しますか?

4

6 に答える 6

24

Django 1.8 以降、 を呼び出すとflush()、ユーザーはログアウトされます。ドキュメントから:

Django 1.8 で変更: セッション Cookie の削除は、Django 1.8 の新しい動作です。以前の動作は、Cookie でユーザーに返されたセッション キーの値を再生成することでした。

キーを削除できるようにしたいが、ユーザーがログインしたままにしたい場合は、手動で処理する必要があります。

for key in request.session.keys():
    del request.session[key]

または、問題のある特定のキーを削除するだけです。

del request.session['mykey']
于 2015-04-17T00:25:29.707 に答える
5

Python 2.x での shacker's 1dict.keys()の改良として、辞書のキーのリスト コピーを返します。Python 3.x では、代わりに反復子を返します。イテレータのサイズを変更するのは賢明ではありません。バージョンセーフな実装では、リストへのキャストによりサイズの問題が回避されます

for key in list(request.session.keys()):
    del request.session[key]

以前の回答では の使用が提案されてdict.viewkeys()いましたが、python 3.x ではイテレータも返されます。

于 2016-04-13T20:45:29.183 に答える