我在同一个IIS(7.5)上的同一个应用程序池中有两个asp.net应用程序(.NET 4.5)。他们的身份验证表来自两个不同的数据库我的问题是,当我登录到一个应用程序时,我也会登录到另一个应用程序(即使其他应用程序没有相同的用户ID)。
显然,这两个应用程序共享同一个会话。我更新了每个应用程序中的Web.config文件,如下所示:
<sessionState
cookieName="some_unique_name"
timeout="30">
</sessionState>
<membership defaultProvider="SqlProvider">
<providers>
<clear/>
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="AuthCorporate"
applicationName="some_unique_name"/>
</providers>
</membership>
它可能与配置身份和身份验证有关。 Startup.Auth.cs 中的 ConfigureAuth()如下所示:
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
}
我错过了使这两个应用程序有自己独立的会话?提前谢谢。
不然
答案 0 :(得分:1)
在您的评论中,您说您正在使用Identity与MVC 5.可能在App_Start文件夹中有一个名为Startup.Auth.cs的文件。这包含部署(OWIN)Startup类的第二部分,其中配置了身份验证。
在这个课程中你应该配置cookieauthentication,可能是一个独特的cookiedomain / cookiename:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieDomain = ".My1stApp.com",
CookieName = "App1CookieName",
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
答案 1 :(得分:0)
非常简单......为每个站点提供自己的应用程序池。应用程序池提供了一定程度的分离/安全性......就像避免会话中的数据交叉一样。最好的是它只需要10秒钟来解决您的问题。我希望这会有所帮助。