【问题标题】:django session key during session会话期间的 django 会话密钥
【发布时间】:2021-09-02 00:10:33
【问题描述】:

我正在寻找从用户登录到他注销时应该相同的会话密钥。我正在与另一个需要此类密钥的 api 进行通信。我尝试使用 csrf 令牌,但每个请求都不同。另外,我尝试过使用会话存储,但它又是不同的。我看到在 django_sessions 中有一个在登录期间创建的 session_key,但我不知道如何将它与用户关联,它只有 session_key、session_data 和过期日期。

def user_login(request):
    if request.method == 'POST':
        response = None
        form = LoginForm()
        username = request.POST.get("username")
        password = request.POST.get("password")
        cookie = request.COOKIES['csrftoken']
        user = authenticate(username=username, password=password)
        # logger.info(f"Session key [Login] --> {request.session}")
        # logger.info(f"Session key [Login] --> {request.session.session_key}")
        # request.session.create()
        # logger.info(f"Session key [Login] --> {request.session.session_key}")
        if user is not None:
            logger.info(f"Cookie [Login] --> {cookie}")
            response = loginApi(
                username, password, 'demo', cookie)
            if response["status"] == 200:
                login(request, user)
                logger.info("User logged in")
                return redirect('home')
            else:
                logger.info(f"Request Response [Log in] --> {response}")
        else:
            logger.error(f"User failed [Log in] --> {response.text}")
    else:
        form = LoginForm()

    return render(request, 'users/login.html', {'form': form})

【问题讨论】:

  • 您使用的是什么 API,为什么需要在会话期间提供会话密钥?
  • 我需要提供一个会话密钥,因为没有它我每次向它发送请求时都必须登录。一个简单的api
  • 你说的是Django登录系统还是别的什么?
  • 我正在登录到不同的 api,因为我每次发出请求时都需要提供一个 cookie。问题是 - django 是否在整个会话期间存储这样的 cookie/密钥,以便我可以将它用于这个外部 api?

标签: python django session cookies session-cookies


【解决方案1】:

request.session 是具有唯一 session_key 的 SessionStore 对象。

一旦访问属性,就会创建 session_key。但 会话对象本身仅在查看后保存到数据库中 已处理(在会话的 process_response 方法中 中间件)通过调用 SessionStore 对象的保存方法。

它并没有真正记录在案,但看看源代码我猜你 应该像这样创建一个新的会话对象:

if not request.session.exists(request.session.session_key):
    request.session.create()

https://stackoverflow.com/a/5131421/9304280

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2017-02-14
    • 2012-06-26
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多