如何让Excel/VBA清除安全凭据?

如何让Excel/VBA清除安全凭据?,vba,excel,session,authentication,Vba,Excel,Session,Authentication,我已经为Excel编写了一个VBA插件,它为服务器提供登录/注销功能 我实现它的方式是向服务器上的URL发送一个请求,该请求检查用户是否有会话,如果没有会话,服务器将在标头上发送401响应(未经授权)。401响应使Excel自动弹出“windows风格”登录模式(我想这是Excel免费提供的)。我输入凭据,服务器对用户进行身份验证,并创建会话 我现在的问题是当我尝试注销时。服务器按预期销毁会话。如果用户现在再次单击登录,Excel会向服务器发送HEAD请求,服务器会以401响应,然后Excel会

我已经为Excel编写了一个VBA插件,它为服务器提供登录/注销功能

我实现它的方式是向服务器上的URL发送一个请求,该请求检查用户是否有会话,如果没有会话,服务器将在标头上发送401响应(未经授权)。401响应使Excel自动弹出“windows风格”登录模式(我想这是Excel免费提供的)。我输入凭据,服务器对用户进行身份验证,并创建会话

我现在的问题是当我尝试注销时。服务器按预期销毁会话。如果用户现在再次单击登录,Excel会向服务器发送HEAD请求,服务器会以401响应,然后Excel会自动发送与用户之前输入的相同的用户名和密码凭据。用户现在再次登录。需要澄清的是,这不是服务器端缓存,而是Excel在收到401响应后,使用HTTP头中的基本身份验证重新发送登录凭据

这不是预期的行为,我不希望Excel存储凭据的副本,并一次又一次地重复使用它们。如果用户注销,我希望这是永久性的,直到他们决定再次登录,此时他们应该重新输入凭据

我遇到的问题是告诉Excel/Windows/VBA?清除它保存的任何东西,无论它保存在哪里。我的问题是,我真的不知道Excel/VBA端的编排是什么,它的功能似乎是免费的,所以我不知道它存储在哪里

值得一提的是,这是我的VBA

 Dim req As MSXML2.XMLHTTP60
 Set req = New MSXML2.XMLHTTP60
 req.Open "GET", url, False
 req.send
发件人:


该请求代码中没有凭据?没有。用户填写弹出的“Windows安全”模式的详细信息后,Excel会自动将凭据放入HTTP身份验证标头中。当Excel收到401响应时,此模式为“免费”。在这个模式上有一个“记住我的凭证”复选框,我没有选中。啊,好吧,我现在明白你的意思了。我不认为这实际上是Excel-我认为这是一个系统事件,而不是应用程序事件,所以我不认为您将通过VBA找到答案。AFAIK Excel没有存储凭据的功能,这是由操作系统处理的。是的,我也不确定它是Excel,更像是Windows的东西。如果关闭Excel并重新打开,则凭据将丢失。我希望我能用VBA手动清除这个。如果不向用户提供此windows身份验证功能,而不提供清除身份验证凭据的功能,这似乎很荒谬。不久前,我在使用SharePoint和VBA时也遇到过类似的情况。可能存在可以使用的windows API,或者可能通过VBA使用windows命令行?对不起,我帮不上什么忙了!:)
myURL = "http://my.domain.com/myscript.cgi"
Dim oHttp As New MSXML2.XMLHTTP
oHttp.Open "POST", myURL, False
oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded'"
oHttp.setRequestHeader(“Cache-Control”, “no-cache”);
oHttp.setRequestHeader(“Pragma”, “no-cache”);
oHttp.setRequestHeader(“If-Modified-Since”, “Sat, 1 Jan 2000 00:00:00 GMT”);
oHttp.setRequestHeader "Authorization","Basic " & Base64EncodedUsernamePassword
oHttp.send "PostArg1=PostArg1Value"
Result = oHttp.responseText