通过HTTP在SVN 1.5.2上的凭据缓存失败

通过HTTP在SVN 1.5.2上的凭据缓存失败,svn,Svn,我们最近在一些服务器/虚拟机上安装了SVN 1.5.2(带有VisualSVN/Apache),现在当我发送带有用户名/密码的命令行命令时,它们不再被缓存。 之前,我们在SVN:///上运行安装了CollabNet的SVN 1.5.0,并且在第一个命令之后缓存了凭据 到目前为止,我发现解决这个问题有困难。我的情况是: 服务器(SVN 1.5.2通过SVN://) 服务器\u HTTP(SVN 1.5.2通过HTTP://) 从命令行到服务器的命令\u SVN:缓存的凭据正常 对服务器的相同命

我们最近在一些服务器/虚拟机上安装了SVN 1.5.2(带有VisualSVN/Apache),现在当我发送带有用户名/密码的命令行命令时,它们不再被缓存。 之前,我们在SVN:///上运行安装了CollabNet的SVN 1.5.0,并且在第一个命令之后缓存了凭据

到目前为止,我发现解决这个问题有困难。我的情况是:

  • 服务器(SVN 1.5.2通过SVN://)
  • 服务器\u HTTP(SVN 1.5.2通过HTTP://)
从命令行到服务器的命令\u SVN:缓存的凭据正常

对服务器的相同命令\u HTTP:不缓存凭据

所以,这似乎是一个http/apache服务器问题。。。但是,从Tortoise开始,凭据被缓存到两台服务器,因此这似乎也是一个客户端调用问题。我的想法快用完了

我使用的命令序列示例如下:


svn ls c:\mylocalfolderSVN --username foo --password bar
svn ls c:\mylocalfolderSVN // this works
svn ls c:\mylocalfolderHTTP --username foo --password bar
svn ls c:\mylocalfolderHTTP  // this fails
最后一个命令停止并请求身份验证

svn://和http://之间的凭据缓存是否不同,或者服务器配置中是否遗漏了某些内容


提前感谢您的建议。

AFAIK凭证缓存是客户端的责任。服务器所做的只是在必要时请求这些凭据。我会检查本地客户端配置文件,也许会看看不同版本的客户端会发生什么。

您是否完全限定了SVN服务器的域名?如果HTTP缓存基于cookie,并且服务器正在使用FQDN写入cookie,但您的请求未使用FQDN(您使用的是SVN服务器,FQDN为SVN服务器.company),则cookie可能无效,每个请求都需要身份验证。

正如wds所指出的,SVN凭据缓存由SVN.exe在客户端完成,在接收到来自服务器的响应后,如“好的,我实际使用了您发送的凭据,它们很好”

这就是为什么我不能弄清楚发生了什么:我从头安装了两台服务器,我向这两台服务器发送相同的命令行,一组凭据被缓存,另一组没有。。。但是,下面使用相同svn.exe的TortoiseSVN将两者都缓存起来(可能它会作弊,缓存凭证,而svn.exe却无法做到这一点)

我现在最好的猜测是http://服务器没有向svn.exe发送“适当的”响应,但我真的不想嗅探所有的http请求来查看发生了什么,叫我lazy,但我有更有趣的事情要做:-)


所以我改变了我的设计,现在我将把SVN密码保存在内存中(WinForm客户端应用程序,都在我们的内部网络中使用),并在每个命令中传递它。

为了缓存凭据,除了适当的配置外,还需要执行如下SVN:

svn ls存储库\u URL

而不是

svn ls工作路径的复制路径


这对我来说很有效,但我不确定这是否是本案的解决方案。

非常感谢您的回复。最终我们改变了调用,验证了每个请求(不再缓存):-)我忘了关闭这个线程。。。