我正在使用DeleteUrlCacheEntry()
以编程方式清除IE的缓存,我想验证我是否正确使用了它。
清除缓存后,我应该期望 Temporary Internet Files 文件夹为空吗? (事实并非如此)
如果没有,那么在访问网站时确定浏览器是否使用其缓存的最简单方法是什么?
澄清:我们的应用与浏览器互动,我写了两个功能,删除Cookie和清除缓存。检查删除cookie功能,登录网站,删除cookie,刷新,您已经注销,这非常简单。但是现在QA打开了一个关于清除缓存没有清空 Temporary Internet Files 目录的错误。我想指导他们如何测试该功能但是想避免使用HTTP嗅探器(如Yuval建议的那样),有更简单的方法吗?
答案 0 :(得分:2)
wininet url cache是一个奇怪而邪恶的生物。有几点需要牢记。第一:如果您打开IE并且正在执行操作,缓存中的某些条目可能会被锁定,您将无法删除它们。第二:并非URL缓存中的所有条目都属于IE,并且临时Internet文件夹中容器中的所有条目都不与浏览器URL缓存相关。第三:根据您的IE版本,存在各种错误,其中URL缓存容器可能会损坏,从而导致其关联文件悬空。这些错误可能已经或可能没有为IE8修复(我不确定)。
确保一切消失的最正确方法是使用FindFirst / FindNextUrlCacheGroup(),然后使用FindFirst / FindNextUrlCacheEntryEx()来枚举组项。然后删除条目,然后删除该组。历史是一个群组,Cookie是另一个群组等。您可以跳过您不感兴趣的群组。
URL缓存本身只是一个美化的哈希表(它位于index.dat文件中),它将URL映射到某些元数据。元数据包含资源的本地缓存文件名。我不确定删除URL缓存条目实际上是删除磁盘上的资源,您可能必须自己使用DeleteFile()。
编辑:
如果您只想清除所有内容,可以使用inetcpl.cpl,ClearMyTracksByProcess trick。这个参数是一个位掩码...我不确定哪个位代表TIF,但它是低八位之一所以它应该相对容易找出来。但这仅适用于IE7和IE8。
链接中还有其他想法。
答案 1 :(得分:0)
显然临时互联网文件目录应为空!
我的代码中有一个错误,因为FindFirstUrlCacheEntry
表示您应该传递"cookie:"
,"visited:
或NULL
,我认为这意味着:
Union("cookie:", "visited:") == NULL
情况并非如此,我必须通过NULL
并过滤掉Cookie(取决于CacheEntryType
字段)。