Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net应用程序上下文数据共享_Asp.net_Caching_Security - Fatal编程技术网

ASP.Net应用程序上下文数据共享

ASP.Net应用程序上下文数据共享,asp.net,caching,security,Asp.net,Caching,Security,我有几个网站使用HTTPModule(包装在dll中)对用户进行身份验证,并将身份验证对象存储在应用程序缓存中约10小时。然后在用户计算机上设置一个包含缓存密钥的cookie 我现在正在寻找一种方法,允许管理员为任何给定用户清除所有网站的特定缓存对象(有效地将其注销),使他们在下次访问任何网站时自动重新登录(通过windows身份验证) 我曾计划建立一个单一的管理网站,该网站具有重置登录的功能,但出于明显的安全原因,我无法更改其他网站的应用程序缓存 有没有办法向使用身份验证模块的站点传递信号,以

我有几个网站使用HTTPModule(包装在dll中)对用户进行身份验证,并将身份验证对象存储在应用程序缓存中约10小时。然后在用户计算机上设置一个包含缓存密钥的cookie

我现在正在寻找一种方法,允许管理员为任何给定用户清除所有网站的特定缓存对象(有效地将其注销),使他们在下次访问任何网站时自动重新登录(通过windows身份验证)

我曾计划建立一个单一的管理网站,该网站具有重置登录的功能,但出于明显的安全原因,我无法更改其他网站的应用程序缓存

有没有办法向使用身份验证模块的站点传递信号,以便它们可以清除自己的应用程序缓存

注意:我已经阅读了memcached,但如果可能的话,我希望避免使用非“标准ASP.NET”的解决方案。

这里有两个想法:

  • 如果它们在同一台服务器上,您可以在文件系统中拥有一个包含所有项目都可以访问的活动登录名的文件
  • 向每个项目添加一个通用处理程序,该处理程序将重置给定用户的登录名。当他登录时,从另一个项目调用此。出于安全原因,可以添加密码短语
编辑:我刚刚想到了一个更好的解决方案:

  • 创建一个跟踪登录状态的中心“身份验证”项目。从网站调用它(例如,通过通用处理程序、Web服务等),注销用户或检查其状态
    • 这里有两个想法:

      • 如果它们在同一台服务器上,您可以在文件系统中拥有一个包含所有项目都可以访问的活动登录名的文件
      • 向每个项目添加一个通用处理程序,该处理程序将重置给定用户的登录名。当他登录时,从另一个项目调用此。出于安全原因,可以添加密码短语
      编辑:我刚刚想到了一个更好的解决方案:

      • 创建一个跟踪登录状态的中心“身份验证”项目。从网站调用它(例如,通过通用处理程序、Web服务等),注销用户或检查其状态

      我选择将代码背载到现有的HTTPModule上

      我检查自定义用户代理字符串,如果它存在,我将根据查询字符串清除相关缓存项,并在成功时返回自定义HTTP头

      唯一的额外开销是检查每个请求的用户代理,我可以接受这些请求


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

      我选择将代码背载到现有的HTTPModule上

      我检查自定义用户代理字符串,如果它存在,我将根据查询字符串清除相关缓存项,并在成功时返回自定义HTTP头

      唯一的额外开销是检查每个请求的用户代理,我可以接受这些请求


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

      通过分析HttpApplication.BeginRequest中的请求,我倾向于使用一种通用处理程序形式&如果url符合某些条件,则运行缓存清除代码。这确实意味着为每个网站维护一个URL的中心列表,以便调用它。是的,但是在每种解决方案中,您都需要这个列表,您希望在网站之间进行直接通信。我只是想到了另一种可能更好的方法,将其编辑到我的答案中。我已经有了一个中心站点来管理它,但是它将经过身份验证的用户的权限传递回请求的项目,以便可以缓存它们。如果我将这些数据缓存在中心项目中,这将无法实现目标,因为消费项目将持续需要查询中心身份验证站点以获得用户权限。我认为我处于一种“Cache22”的状态,哈哈。通过分析HttpApplication.BeginRequest中的请求,我倾向于使用一种通用处理程序&如果url符合某些条件,则运行缓存清除代码。这确实意味着为每个网站维护一个URL的中心列表,以便调用它。是的,但是在每种解决方案中,您都需要这个列表,您希望在网站之间进行直接通信。我只是想到了另一种可能更好的方法,将其编辑到我的答案中。我已经有了一个中心站点来管理它,但是它将经过身份验证的用户的权限传递回请求的项目,以便可以缓存它们。如果我将这些数据缓存在中心项目中,这将无法实现目标,因为消费项目将持续需要查询中心身份验证站点以获得用户权限。我想我正处于一种“缓存22”的状态,哈哈。