Python Django会话在两个单独的请求上不可用
说明: 在报告中说: 您可以在视图中的任何位置读取和写入request.session 但在对同一视图发出第二个请求时,我无法访问会话: views.pyPython Django会话在两个单独的请求上不可用,python,python-3.x,django,django-views,Python,Python 3.x,Django,Django Views,说明: 在报告中说: 您可以在视图中的任何位置读取和写入request.session 但在对同一视图发出第二个请求时,我无法访问会话: views.py 类登录(APIView): def post(自我,请求): 打印(“之前:”,请求.session.get(“用户”) 请求。会话[“用户”]=“管理员” 打印(request.session.get(“用户”)#输出“admin” 返回响应() 预期输出: 在第二次请求(使用)后,它应输出: "admin" 输出:
类登录(APIView):
def post(自我,请求):
打印(“之前:”,请求.session.get(“用户”)
请求。会话[“用户”]=“管理员”
打印(request.session.get(“用户”)#输出“admin”
返回响应()
预期输出:
在第二次请求(使用)后,它应输出:
"admin"
输出:
相反,它输出:
None
如何使会话在独立请求之间可用?正如@AbdulAzizBarkat在评论中提到的,问题是会话凭据没有发送到后端。会话在跨域场景中的工作方式是:
- 在后端验证用户
- 会话被发送到前端并存储在浏览器中
- 会话凭据必须在每次请求时发送到后端
xhrFields:{withCredentials:true}
的解决方案对我不起作用
回答:
我没有使用ajax请求,而是使用了
设置凭据:“包括”
非常重要,否则Cookie将不会跨源发送。请求如下所示:
fetch(`${API}/login`{
证书:“包括”,
方法:“张贴”,
正文:数据,
}).然后(…).抓住(…);
显示您如何从客户端发出请求。您可能没有在客户端使用会话并独立发出每个请求。出于安全原因,会话不应该存储在后端吗?我使用jquery向URL发出post/get请求会话数据可以存储在数据库或cookie中,具体取决于您的设置。Bu至少会话密钥需要在cookies中。我相信,这个问题的第二个答案应该对您有所帮助