Форум сайта python.su
django.contrib.auth.login()/logout() удаляют текущую сессию и создают новую. А в месте с сессией удаляется и корзина. Подскажите, пожалуйста, как лучше изменить поведение этого модуля.
Я пока просто изменил эти функции в /usr/share/pyshared/django/contrib/auth/__init__.py. Вот так:
def login(request, user):
"""
Persist a user id and a backend in the request. This way a user doesn't
have to reauthenticate on every request.
"""
if user is None:
user = request.user
# TODO: It would be nice to support different login methods, like signed cookies.
user.last_login = datetime.datetime.now()
user.save()
if SESSION_KEY in request.session:
if request.session[SESSION_KEY] != user.id:
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
request.session.clear() #request.session.flush()
else:
pass #request.session.cycle_key()
request.session[SESSION_KEY] = user.id
request.session[BACKEND_SESSION_KEY] = user.backend
if hasattr(request, 'user'):
request.user = user
def logout(request):
"""
Removes the authenticated user's ID from the request and flushes their
session data.
"""
request.session.clear() #request.session.flush()
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()
def get_user(request):
from django.contrib.auth.models import AnonymousUser
try:
user_id = request.session[SESSION_KEY]
backend_path = request.session[BACKEND_SESSION_KEY]
backend = load_backend(backend_path)
user = backend.get_user(user_id) or AnonymousUser()
except KeyError:
user = AnonymousUser()
return user
Офлайн
Может просто в куках хранить независимо от сессии идентификатор корзины?
Офлайн
ну так мне как-то больше нравится: устаревшие корзины удаляются вместе с сессиями, для авторизованных пользователей создается независимая от сессии корзина. и к тому же хранить id прямо в куках как-то небезопасно.
Офлайн