django_session
ログイン時に に手動で行を追加するdjango.contrib.auth.logout()
と、request.session.flush()
) 関数は現在のセッション キーと同じ主キーを持つ行のみをテーブルから削除します。session_key
django_session
request.session.flush()
ユーザーのブラウザから以前のセッション データに再度アクセスできないようにするために使用されます。基本的に次の 2 つのことを行います。
- 現在のセッション データをデータベース (またはキャッシュ、セッション バックエンド用に選択したものによって異なります) から削除します。
- Cookie でユーザーに送り返されるセッション キーの値を再生成します。
の Django ソース コードdjango.contrib.auth.logout()
:
def logout(request):
"""
Removes the authenticated user's ID from the request and flushes their
session data.
"""
# Dispatch the signal before the user is logged out so the receivers have a
# chance to find out *who* logged out.
user = getattr(request, 'user', None)
if hasattr(user, 'is_authenticated') and not user.is_authenticated():
user = None
user_logged_out.send(sender=user.__class__, request=request, user=user)
request.session.flush()
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()
データベースベースのセッションの削除方法:
def delete(self, session_key=None):
if session_key is None:
if self.session_key is None:
return
session_key = self.session_key
try:
Session.objects.get(session_key=session_key).delete()
except Session.DoesNotExist:
pass
手動で追加した行を削除するには、Django シグナルdjango.contrib.auth.signals.user_logged_out
を利用して、ユーザーのログアウト時に行を削除します。