多租户应用程序中的ASP.NET会话和Cookie

时间:2011-03-28 15:15:34

标签: asp.net asp.net-mvc multi-tenant

我正在开发一个多租户ASP.NET MVC应用程序。

到目前为止,我们一直在使用HttpContext为请求存储一些对象(技术上由租户分区)。

但是,我们需要使用TempData(使用Session)并设置身份验证cookie。

我们的规范:

  • 租户可以有多个网址(tenant1.myapp.com或mycustomdomain.com)
  • 认证Cookie不应由租户共享
  • 理想情况下,租户的身份验证Cookie应由其任何一个网址共享

会话域是否可识别?好像是。

我可以在身份验证Cookie上设置多个域吗?

对可能会让我感到困惑的任何其他事情的建议将不胜感激。真的,我只需要了解每个租户需要分区的内容(到目前为止,我已经对每个租户的文件系统,数据库和缓存进行了分区)。

由于

2 个答案:

答案 0 :(得分:4)

  

是否了解会话域?

默认情况下,会话由Cookie跟踪,并且由于Cookie仅限于同一个域,因此会话不仅可以识别域,还可以识别应用程序,这意味着如果您在同一个域中有两个应用程序,则它们不会共享会话。 / p>

  

我可以在身份验证Cookie上设置多个域吗?

没有。 Cookie不能在域之间共享。但与会话相反,您可以在同一个域中的多个应用程序之间共享它们(通过将domain属性设置为web.config中<forms>标记中的顶级域名。这是允许在同一域上的应用程序之间实现单点登录的原因。如果您希望在不同域上的应用程序之间实现单点登录,则需要different approach

答案 1 :(得分:0)

您可能需要查看Session Partitioning

<configuration>
    <system.web>
        <sessionState 
            mode="StateServer" 
            partitionResolverType=
                "IndustryStrengthSessionState.PartitionResolver" />
    </system.web>
</configuration> 

但我不相信你可以开箱即用跨域分享会话。您可能需要添加自定义会话同步,其中每个域会话通过自定义算法链接到同一用户/租户等。