Py学习  »  Django

django如何在一个浏览器中同时登录多个用户,避免session覆盖?

3040284313 • 3 年前 • 716 次点击  

from django.contrib.auth import login 下面是django中的login源代码,请问怎么改才可以在一个浏览器中同时登录多个用户 默认是最新登录的用户的session会覆盖之前用户的session。(就是在django_session表中覆盖,导致之前登录的用户的session被覆盖) 如果是不同的浏览器则不会覆盖,总之同一个浏览器只能同时登录一个用户。 网上有一种方法,是把session改为列表的形式,但是完全没头绪。没办法了,求解,多谢了。

def login(request, user, backend=None):

session_auth_hash = ''
if user is None:
    user = request.user
if hasattr(user, 'get_session_auth_hash'):
    session_auth_hash = user.get_session_auth_hash()

if SESSION_KEY in request.session:
    if _get_user_session_key(request) != user.pk or (
            session_auth_hash and
            not constant_time_compare(request.session.get(HASH_SESSION_KEY, ''), session_auth_hash)):

        request.session.flush()
else:
    request.session.cycle_key()

try:
    backend = backend or user.backend
except AttributeError:
    backends = _get_backends(return_tuples=True)
    if len(backends) == 1:
        _, backend = backends[0]
    else:
        raise ValueError(
            'You have multiple authentication backends configured and '
            'therefore must provide the `backend` argument or set the '
            '`backend` attribute on the user.'
        )
else:
    if not isinstance(backend, str):
        raise TypeError('backend must be a dotted import path string (got %r).' % backend)
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = backend
request.session[HASH_SESSION_KEY] = session_auth_hash
if hasattr(request, 'user'):
    request.user = user
rotate_token(request)
user_logged_in.send(sender=user.__class__, request=request, user=user)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99252
 
716 次点击