如何在Safari中清除auth基本缓存

时间:2015-12-10 14:16:28

标签: javascript safari http-basic-authentication

如何在Safari中清除基本身份验证?我的代码适用于Chrome,Firefox等。但不是Safari。

我希望在没有浏览器登录对话框的情况下退出(纯粹的javascript应用程序)。

            if(navigator.userAgent.indexOf('MSIE') > -1) {
                document.execCommand('ClearAuthenticationCache', 'false');
                //blabla
            }
            else {
                $.ajax({
                    url: '/api/v1',
                    username: '_logout',
                    statusCode: {
                        401: function() {
                             //blabla          
                        }
                    }
                }); 
            }

服务器端:

if(isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == '_logout') {
          (new \App\Http\Response())
              ->setHeader('WWW-Authenticate', 'Basic realm="app"')
             ->send(401, 'Unauthorized');
    }       

与Firefox&合。没有浏览器登录提示。 但是在我的应用程序中点击退出按钮后,我从Safari浏览器获得了一个登录对话框。

当然,如果我不发送WWW-Authenticate标头,它会起作用·但是我们没有真正的注销,因为浏览器不会清除auth缓存。并且每次请求都会向“_logout”用户发送Authorization标头,直到我再次使用新用户登录。

如果没有发送WWW-Authenticate,我无法覆盖Authorization标头。浏览器将始终采用缓存值。例如,我使用基本身份验证登录然后注销(服务器只发送没有WWW-Authenticate的401)。好的,现在我想使用Bearer令牌登录,但这不起作用,因为浏览器采用旧的缓存基本字符串。

Da .. Safari ......

0 个答案:

没有答案