代码之家  ›  专栏  ›  技术社区  ›  PanJanek

为什么LiveID Web auth需要用image/gif响应确认cookie删除?

  •  1
  • PanJanek  · 技术社区  · 15 年前

    在LiveID Web认证场景中,当客户端应用程序收到“Clearcookie”请求时,它负责清除授权cookie,并应通过HTTP返回任何GIF图像来确认成功。在ASP.NET-MVC中使用LiveID Web身份验证的引用实现如下:

     if (Request["action"]=="clearcookie")
     {
          string contentType;
          byte[] content;
          wll.GetClearCookieResponse(out contentType, out content);
          return this.File(content, contentType);
     }
    

    其中,wll.getclearCookeierResponse实现为:

        public void GetClearCookieResponse(out string type, out byte[] content)
        {
            const string gif = 
              "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7";
            type = "image/gif";
            content = Convert.FromBase64String(gif);
        }
    

    因此getClearCookiereResponse方法创建了字节[]数组,其中包含微小的硬编码GIF。

    有没有什么特别的原因需要用GIF来回应?为什么不只是纯文本(“OK”)或JSON?

    是否有其他(除了LiveID)协议使用返回的GIF作为响应?我问是因为我想知道在需要类似通信场景的项目中是否有任何理由采用这种解决方案。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Dolph    15 年前

    当用户退出Windows Live或Windows Live应用程序时,将尽最大努力从用户可能登录的所有其他Windows Live应用程序中注销该用户。这是通过调用查询字符串中“action”参数设置为“clearcookie”的每个应用程序的处理程序页来完成的。然后,应用程序处理程序负责清除与登录关联的任何cookie或数据。成功注销用户后, 处理程序应返回一个gif(任意gif)作为响应 操作=ClearCookie查询。

    此函数返回适当的内容类型和正文响应,应用程序处理程序可以返回该响应,以表示从应用程序成功注销。

    您的代码应该只返回指定的图像(.gif),而不返回其他任何内容。额外的字节将触发错误(图像格式错误)。

    我想这可能是任何类型的预期响应,他们怀疑他们选择了GIF,因为它会导致浏览器在收到连接时立即挂断。