Django 如何在下一个请求中获取会话数据?

How can Django get session data in next request?

def home(request):
    # logged in
    if request.user.is_authenticated:
        request.session['username'] = str(request.user)
        request.session.set_expiry(0)

    # anonymous
    else:
        # how could Django get session data here ?
        cur = request.session.get('username', None)
        if cur:
            pass
        else:
            anon = random.choice(settings.SESSION_NAMES)
            request.session['username'] = anon
            request.session.set_expiry(42)

    res = render(request, 'ex/home.html', {'username': request.session['username']})
    return res

我正在尝试了解会话。在上面的匿名案例中,我将会话数据 'username' 设置为已获取的请求。在下一个请求中(刷新后),我可以获得会话数据。

但我不明白它是如何工作的。这是一个新请求,我在上一个请求中设置了 'username',而不是响应。

尽管未将其设置为上一个响应对象,但我如何从下一个请求对象中获取 'username'?

How could I get 'username' from next request object despite not setting it to previous response object?

会话数据不是由客户端存储,而是由服务器存储。存储在客户端的数据就是cookies。

Django 在浏览器中设置一个默认名为 sessionid 的 cookie(您可以通过更改 SESSION_COOKIE_NAME setting [Django-doc] 来更改它,因此它包含为该会话存储的会话数据的标识符.

因此,浏览器每次都会向 sessionid 发出请求,如果您访问 request.session,那么它会查看它存储在数据库中的内容。

您可以更改服务器存储 cookie 的方式以及使用的序列化程序。有关详细信息,请参阅 How to use sessions section of the documentation.