2011-09-08 56 views
1

我有几个网站使用HTTPModule(包装在DLL中)来认证用户并将认证对象存储在应用程序缓存中约10小时。然后我在用户机器上设置一个包含缓存键的cookie。ASP.Net应用程序上下文数据共享

我现在正在寻找一种方法来允许管理员清除任何给定用户的所有网站的特定缓存对象(实际登出),导致他们下次访问时自动重新登录(通过Windows身份验证)任何网站。

我打算建立一个单一管理网站,提供重设登录的功能 - 但由于明显的安全原因,我无法更改其他网站的应用程序缓存。

有没有任何方式将信号传递给那些使用认证模块的站点,以便他们可以清除自己的应用程序缓存?

注意:我已经阅读了memcached,但我想避免一个不是'标准ASP.NET'的解决方案,如果可能的话。

回答

1

这里有两个想法:

  • 如果他们是在同一台服务器上,你可以有包含在文件系统中活动的登录文件,所有的项目都可以访问。
  • 为每个项目添加一个通用处理程序,重置给定用户的登录名。当他从那里注销时,从另一个项目调用它。出于安全原因,您可以添加密码。

编辑:我只是想一个更好的解决方案:

  • 创建一个中心“认证”项目跟踪的登录状态。从网站调用它(例如通过通用处理程序,webservice ...)以注销用户或检查其状态。
+0

我倾向于通用处理程序的一种形式,通过分析HttpApplication.BeginRequest中的请求并运行缓存清除代码(如果url符合某些条件)。它确实意味着维护每个网站的URL的中央列表,以便尽可能地调用它。 –

+0

的确如此,但是您将需要使用各种解决方案的列表,您希望在这些网站之间进行直接交流。我只是想到另一个,可能更好的方法,但将编辑到我的答案。 – magnattic

+0

我已经有一个中央站点来管理它,但是它将已验证用户的权限传递回请求项目,以便它们可以被缓存。如果我将这些数据缓存在中央项目中,它将会破坏目标,因为消费项目将不断需要查询中央身份验证站点以获取用户权限。我想在一个“Cache22”的情况下,哈哈。 –

0

我选择将代码载入现有的HTTPModule。

我检查自定义的用户代理字符串,如果存在我清除相关的缓存条目基于查询字符串,并成功返回自定义HTTP标头。

唯一的额外开销是检查每个请求,我可以住的用户代理。

通过此设置,我现在可以使用我的中心站点的WebRequest对象(注入我的自定义用户代理字符串)将消息发送到使用该模块的所有站点。

相关问题