代码之家  ›  专栏  ›  技术社区  ›  ilija veselica

ASP.NET MVC自定义成员身份提供程序-对一个应用程序的严格登录缓存

  •  1
  • ilija veselica  · 技术社区  · 15 年前

    我为ASP.NET MVC应用程序创建了自定义成员资格提供程序,除了一件事外,它都可以正常工作:
    当登录到我的应用程序时,我也会登录到使用Visual Studio运行的所有其他ASP.NET MVC应用程序。我认为这些数据是从缓存中提取的,因为当我注销并尝试在其他应用程序中再次登录时,我将被拒绝。

    在webconfig中,我添加了applicationname来解决这个问题,但它不起作用:

    <membership defaultProvider="SAMembershipProvider" userIsOnlineTimeWindow="15">
          <providers>
            <clear/>
            <add
              name="SAMembershipProvider"
              type="ShinyAnt.Membership.SAMembershipProvider, ShinyAnt"
              connectionStringName ="ShinyAntConnectionString"
              applicationName="MyApp"
              />
          </providers>
        </membership>
    
        <roleManager defaultProvider="SARoleProvider" enabled="true" cacheRolesInCookie="true">
          <providers>
            <clear/>
            <add
              name="SARoleProvider"
              type="ShinyAnt.Membership.SARoleProvider"
              connectionStringName ="ShinyAntConnectionString"
              applicationName="MyApp"
              />
          </providers>
        </roleManager>
    

    有没有什么方法是我忘记实现的,是用来处理这个问题的,还是其他的?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Wiebe Tijsma    15 年前

    对你来说可能有点晚了,但是其他人可能会发现这一点很有用。

    默认情况下,表单身份验证使用浏览器cookie保存您的身份验证状态,并且它们的作用域范围(和限制)为(子)域级别(可能 http://localhost/ 以你为例?).

    这意味着在“localhost”域根目录下运行的每个应用程序( http://localhost/App1 , http://localhost/App2 )可以访问相同的身份验证cookie。

    您可以通过在web.config中为每个应用程序指定不同的cookie名称来解决此问题:

    <authentication mode="Forms">
      <forms name="[cookie name]"></forms>
    </authentication>
    

    希望这有帮助…