То, что вы хотите сделать, называется Single Sign On и Single Sign Off. Существуют различия в зависимости от того, как у вас настроены приложения. Я постараюсь уточнить, где эти различия вступают в игру.
Чтобы реализовать единый вход и единый выход, необходимо, чтобы имена файлов cookie, атрибуты защиты и пути были одинаковыми для всех приложений.
<authentication mode="Forms">
<forms name=".cookiename"
loginUrl="~/Login.aspx"
timeout="30"
path="/" />
</authentication>
Затем вам нужно добавить машинные ключи, и они должны быть одинаковыми для всех ваших приложений.
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
validation="SHA1" />
Используете ли вы домены второго или третьего уровня для приложений? Если это так, вам нужно будет сделать немного больше, добавив домен в cookie:
protected void Login(string userName, string password)
{
System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
cookie.Domain = "domain1.com";
cookie.Expires = DateTime.Now.AddDays(30);
Response.AppendCookie(cookie);
}
Теперь, чтобы выполнить однократную подпись, вызова FormsAuthentication.SignOut может быть недостаточно. Следующая лучшая вещь - установить дату окончания срока действия куки. Это гарантирует, что cookie больше не будет использоваться для аутентификации.
protected void Logout(string userName)
{
System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
cookie.Domain = "domain1.com";
cookie.Expires = DateTime.Now.AddDays(-1);
Response.AppendCookie(cookie);
}
Я принимаю во внимание, что вы используете одну и ту же базу данных для всех приложений. Если приложения используют отдельную базу данных для регистрации и аутентификации, то нам нужно будет сделать еще немного. Просто дайте мне знать, если это так. В противном случае это должно работать для вас.