我有一个使用表单身份验证的 Asp.Net MVC 应用程序,它以不同的应用程序名称发布到同一个 IIS 网站:
Default Web Site/Dashboard
Default Web Site/Partner
使用 Chrome,如果我转到Dashboard
实例并登录,一切似乎都正常。如果我打开一个单独的浏览器窗口并导航到该Partner
实例,系统会提示我按预期登录。登录Partner
实例后,一切似乎也正常。 当我返回之前的浏览器窗口并尝试访问Dashboard
实例上经过身份验证的资源时,就会出现问题,在那里我被重定向到登录页面,就好像我以某种方式被注销一样。 如果我在Dashboard
实例上再次登录,事情就会再次正常工作。但如果我去Partner
例如,我发现我在那里登出。似乎登录到另一个应用程序实例的行为以某种方式让我退出了前一个应用程序实例。我做了一些检查,看来问题是由我的表单身份验证 cookie 设置引起的。这是我使用的:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
timeout="1576800"/>
</authentication>
我没有明确指定 cookie 路径,所以我认为 cookie 路径可能由应用程序实例共享,因此它被覆盖了。所以我试图明确指定一个cookie路径。所以当我发布时Dashboard
,我使用了这个:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
timeout="1576800"
cookieless="UseCookies"
path="/Dashboard" />
</authentication>
而对于Partner
,我使用了这个:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn"
timeout="1576800"
cookieless="UseCookies"
path="/Partner" />
</authentication>
然而,这根本不起作用。使用这些设置,我什至无法正确登录和注销。 我的目标是让 Dashboard 和 Partner 实例完全独立于表单身份验证,因此登录其中一个不会影响另一个。如果不将它们放在不同的 IIS 网站名称中,这可能吗?