Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django会话在两个单独的请求上不可用_Python_Python 3.x_Django_Django Views - Fatal编程技术网

Python Django会话在两个单独的请求上不可用

Python 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" 输出:

说明:

在报告中说:

您可以在视图中的任何位置读取和写入request.session

但在对同一视图发出第二个请求时,我无法访问会话:

views.py

类登录(APIView):
def post(自我,请求):
打印(“之前:”,请求.session.get(“用户”)
请求。会话[“用户”]=“管理员”
打印(request.session.get(“用户”)#输出“admin”
返回响应()
预期输出:

在第二次请求(使用)后,它应输出:

"admin"
输出:

相反,它输出:

None

如何使会话在独立请求之间可用?

正如@AbdulAzizBarkat在评论中提到的,问题是会话凭据没有发送到后端。会话在跨域场景中的工作方式是:

  • 在后端验证用户
  • 会话被发送到前端并存储在浏览器中
  • 会话凭据必须在每次请求时发送到后端
但是,您不能阅读此会话cookie,如所述:

出于安全原因,浏览器无法访问从ajax请求接收的第三方cookie,但它会自动为您处理这些cookie

提供的使用ajax和设置
xhrFields:{withCredentials:true}
的解决方案对我不起作用

回答:

我没有使用ajax请求,而是使用了

设置
凭据:“包括”
非常重要,否则Cookie将不会跨源发送。请求如下所示:

fetch(`${API}/login`{
证书:“包括”,
方法:“张贴”,
正文:数据,
}).然后(…).抓住(…);

显示您如何从客户端发出请求。您可能没有在客户端使用会话并独立发出每个请求。出于安全原因,会话不应该存储在后端吗?我使用jquery向URL发出post/get请求会话数据可以存储在数据库或cookie中,具体取决于您的设置。Bu至少会话密钥需要在cookies中。我相信,这个问题的第二个答案应该对您有所帮助