登录到另一个实例时登出的asp.net表单身份验证

时间:2011-11-23 01:15:10

标签: asp.net forms-authentication

我正在使用VS 2010在我的本地计算机上进行一些开发并在Cassini中运行我的开发代码,我也获取了相同代码的副本并将其部署到c:\ mp并在IIS7中设置一个Web应用程序指向到这个目录。

两个应用程序都指向不同的数据库。我通过http://localhost/mp

访问IIS

当我登录其中任何一个时,如果我已经登录,则导致我从另一个登出。

我觉得这与我们正在使用的表单身份验证有关,可能会覆盖cookie但我还没有找到任何有用的东西。

表单身份验证设置如下所示

<authentication mode="Forms">
    <forms name="MP" loginUrl="~/login.aspx" protection="All" timeout="20" path="/" slidingExpiration="true" cookieless="UseCookies" defaultUrl="~/Modules/Enquirer/Default.aspx" />
</authentication>

我们也在使用角色和会员提供者

 <roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="AspNetSqlRoleProvider">
            <providers>
                <clear />
                <add name="AspNetSqlRoleProvider" connectionStringName="mpconnectionstring" applicationName="mp" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            </providers>
        </roleManager>
        <membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="20" hashAlgorithmType="SHA1">

我们也在使用inProc会话状态,虽然我不确定这是否会成为一个问题。

任何人都可以建议为什么会发生这种情况以及如何解决这个问题?                                                                                                      

2 个答案:

答案 0 :(得分:4)

问题在于cookie,因为cookie保留了记录的确认。

在web.config上更改cookie的名称可能会解决您的问题。因此,请根据两个不同的登录信息使用2个不同的Cookie后缀名称设置名称

<authentication mode="Forms">
 <forms ... name=".CookieSuffix" domain="yoururl.com" ... />
</authentication> 

答案 1 :(得分:1)

您需要在web.config中明确设置某些cookie的名称。以下是一些通常需要的:

1)身份验证cookie

<authentication mode="Forms">
<forms name=".ASPXAUTH_YourAppName" ... 

2)角色管理员cookie

<roleManager cacheRolesInCookie="true" cookieName=".ASPXROLES_YourAppName" .. 

3)会话状态cookie

<sessionState cookieName="ASP.NET_SessionId_YourAppName" ... 

我为不同的应用程序添加了默认cookie名称的唯一后缀。例如在上面,将“YourAppName”替换为您的不同应用实例的唯一内容。