Skip to main content
 首页 » 编程设计

python之由于多个并发请求,Django session cookie 丢失

2025年05月04日24webabcd

我正在构建一个应用程序,其中客户端时不时地对服务器执行 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。