我正在构建一个应用程序,其中客户端时不时地对服务器执行 ping 操作(我们先不谈原因)。当服务器处理这些请求时,它使用 request.user.is_authenticated() 检查客户端是否登录
看起来像这样:
def handle_ping_request(request):
if request.user.is_authenticated():
# Do something...
else:
# Do Something else...
我注意到有时服务器会立即收到一个登录请求,然后是一个 ping 请求(来自同一用户)。然后客户端成功登录,响应返回一个新的 session ID(登录用户的)并且(我猜)旧的 session ID(匿名用户的)被删除。处理 ping 请求时,其请求包含旧的 session ID。因此,ping 请求返回第三个 session ID,并且在客户端发出的下一个请求中,客户端不再登录。
我的登录代码如下所示:
if not request.user.is_authenticated():
user = auth.authenticate(...credentials...)
if user and user.is_active:
auth.login(request, user)
您对如何避免这个问题有什么建议吗?最好不要让客户参与。
谢谢。
最佳答案
在服务器上处理这个可能太麻烦了,因为您必须创建某种信号量系统,该系统还会尝试猜测当前是否有任何 ping 来自也正在验证的客户端。我的建议是简单地更改客户端代码,使其在等待对其登录请求的响应时不执行 ping。
关于python - 由于多个并发请求,Django session cookie 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783206/