2

我有一个 Web 服务,它将经过身份验证的用户令牌存储在 HttpRuntime.Cache 中,以用于所有后续请求。缓存项目的有效期为 24 小时。

其次,我有一个 vb.net 应用程序,它每 15 秒 ping 一次这个 web 服务。它经过一次身份验证,然后将缓存的令牌用于所有后续请求。我的问题是应用程序似乎在随机时间间隔内丢失身份验证,时间间隔小于 24 小时滑动到期。然而,随着它每 15 秒被 ping 一次,身份验证永远不会过期。

我正在寻找一种查看 HttpRuntime.cache 的方法,以尝试确定问题出在 Web 服务安全方法中还是在 vb.net 应用程序中。我可以以某种方式查看 HttpRuntime.cache 吗?

Web 服务是在 Windows Server 2008 上使用 asp.net 2.0 构建的 Web 表单站点的一部分。

4

2 回答 2

1

我的密钥的名称是未知的,因为它们是系统生成的以用户名作为值的 guid 值。因此,为了查看未知的缓存集合,我使用了一个简单的循环,如下所示。

Dim CacheEnum As IDictionaryEnumerator = Cache.GetEnumerator()
While CacheEnum.MoveNext()
    Dim cacheItem As String = Server.HtmlEncode(CacheEnum.Entry.Key.ToString())
    Dim cacheItem2 As String = Server.HtmlEncode(CacheEnum.Entry.Value.ToString())
    Response.Write(cacheItem & ":" & cacheItem2 & "<br />")
End While

希望这对其他人有帮助。

于 2012-10-01T12:35:39.577 回答
-1

首先,HttpRuntime.Cache 不是存储用户身份验证信息的最佳位置。您应该改为使用 HttpContext.Current.Session 来存储此类数据。从技术上讲,缓存可以按照自己的意愿“弹出”其中的内容(无论何时决定)。

如果您确实需要使用缓存,您可以通过简单地执行以下操作来检查您的项目是否在缓存中:

HttpRuntime.Cache["Key"] == null
于 2012-09-29T07:02:48.713 回答