我在一台机器上设置了两个ASP.NET应用程序,它们的web.config文件在AspNetSqlMembershipProvider项目中包含相同的applicationName值,因此它们共享用户和角色.
问题顺序是:
反之亦然.
我应该使用不同的方法在两个应用程序之间共享登录信息吗?
我正在使用ASP.NET.我要么添加或设置一个cookie(取决于是否HttpRequest包含具有指定密钥的cookie),然后立即调用Response.Redirect.cookie未设置.这是正确的行为吗?在具有302状态代码的http响应期间设置cookie是否相互排斥?
if (context.HttpContext.Request.Browser.Cookies)
{
var cookies = context.HttpContext.Request.Cookies;
var stateCookie = new HttpCookie(SR.session, clientState.SessionId.ToString());
if (cookies.AllKeys.Contains(SR.session))
{
context.HttpContext.Response.Cookies.Set(stateCookie);
}
else
{
context.HttpContext.Response.Cookies.Add(stateCookie);
}
}
Run Code Online (Sandbox Code Playgroud)
asp.net response.redirect httpresponse httpcontext httpcookie
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我们还使用角色和成员资格提供者
<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">
Run Code Online (Sandbox Code Playgroud)
尽管我不确定这是否会成为问题,但我们也都使用了inProc会话状态。
谁能说出为什么发生这种情况以及如何解决呢?