在多个网站中使用 Mvc4 FormsAuthentication 问题
Mvc4 FormsAuthentication issue while using it in multiple websites
我正在开发两个不同的网站。因为我已经使用 FormsAuthentication
进行身份验证。我正在使用以下代码
FormsAuthenticationTicket authTicket = default(FormsAuthenticationTicket);
HttpCookie authCookie = default(HttpCookie);
authTicket = new FormsAuthenticationTicket(1, user.userContext.UserName, DateTime.Now, DateTime.Now.AddMinutes(Session.Timeout), model.RememberMe, model.Email);
string strEncryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
if (authTicket.IsPersistent)
{
authCookie.Expires = authTicket.Expiration;
}
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);;
Session.Add(Constants.LOGIN_DO, user.userContext);
我在两个站点中使用相同的代码登录。当登录到一个站点时,它可以工作。但是,如果我在同一浏览器上打开其他站点并尝试登录,则会产生问题。它行为不端 - 就像当我从 site1 注销时它也从 site2 注销。假设第一个站点是 www.someone.com
,第二个站点是 something.someone.com
。
Note: for site2 I am changing value Session.Add(Constants.LOGIN_DO,
user.userContext);
where LOGIN_DO = "OrgLoginDO";
web.config
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
我不明白为什么会这样?有人可以帮我解决这个问题吗?我需要使用不同的东西吗?我想像 那样实现它而没有 单点登录。
为避免两个站点的表单身份验证 cookie 之间发生冲突,您可以为它们指定不同的名称:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="SITE1COOKIE" />
</authentication>
在您的第二个站点中:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="SITE2COOKIE" />
</authentication>
我还看到您正在使用 ASP.NET 会话。确保您也为会话指定了不同的 cookie 名称:
<sessionState cookieName="SITE1SESSION" ... />
和:
<sessionState cookieName="SITE2SESSION" ... />
我正在开发两个不同的网站。因为我已经使用 FormsAuthentication
进行身份验证。我正在使用以下代码
FormsAuthenticationTicket authTicket = default(FormsAuthenticationTicket);
HttpCookie authCookie = default(HttpCookie);
authTicket = new FormsAuthenticationTicket(1, user.userContext.UserName, DateTime.Now, DateTime.Now.AddMinutes(Session.Timeout), model.RememberMe, model.Email);
string strEncryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
if (authTicket.IsPersistent)
{
authCookie.Expires = authTicket.Expiration;
}
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);;
Session.Add(Constants.LOGIN_DO, user.userContext);
我在两个站点中使用相同的代码登录。当登录到一个站点时,它可以工作。但是,如果我在同一浏览器上打开其他站点并尝试登录,则会产生问题。它行为不端 - 就像当我从 site1 注销时它也从 site2 注销。假设第一个站点是 www.someone.com
,第二个站点是 something.someone.com
。
Note: for site2 I am changing value
Session.Add(Constants.LOGIN_DO, user.userContext);
whereLOGIN_DO = "OrgLoginDO";
web.config
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
我不明白为什么会这样?有人可以帮我解决这个问题吗?我需要使用不同的东西吗?我想像 那样实现它而没有 单点登录。
为避免两个站点的表单身份验证 cookie 之间发生冲突,您可以为它们指定不同的名称:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="SITE1COOKIE" />
</authentication>
在您的第二个站点中:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="SITE2COOKIE" />
</authentication>
我还看到您正在使用 ASP.NET 会话。确保您也为会话指定了不同的 cookie 名称:
<sessionState cookieName="SITE1SESSION" ... />
和:
<sessionState cookieName="SITE2SESSION" ... />