Это действительно зависит от того, что вы кэшировали. Если это данные, вы можете очистить кэшированные данные, не заставляя своих пользователей снова войти в систему.
Если это изменение данных или разрешений / безопасности, то в вашей базе данных может быть параметр SchemaVersion, в котором хранится текущая версия базы данных. Каждый зарегистрированный пользовательский запрос к приложению может сравнивать версию файла cookie / сеанса с версией в базе данных, и, если она отличается, заставить клиента удалить сеанс / файл cookie и повторно выполнить вход в систему.
Согласно справочной статье Microsoft, вы можете сбросить сеанс следующим образом:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
А из MSDN вы можете очистить ваш файл cookie следующим образом:
if (HttpContext.Current.Request.Cookies["MyCookieName"] != null)
{
HttpCookie aCookie = HttpContext.Current.Request.Cookies["MyCookieName"];
aCookie.Expires = DateTime.Now.AddDays(-10);
aCookie.Value = "";
HttpContext.Current.Response.Cookies.Add(aCookie);
}
Это должно заставить войти, но я сам не подтвердил это.
Итак, в итоге вы можете использовать ASP.NET Cache для хранения версии схемы БД и:
В начале загрузки страницы вызовите вспомогательный класс LoginResetHelper.IsDbValid()
, чтобы узнать, нужно ли нам снова войти в систему
В классе помощника вы спросите
if (Cache["SchemaVersion"] == null)
{
// retrieve schemaVersion from db
Cache.Add("SchemaVersion", schemaVersion);
}
HttpCookie oCookie = new HttpCookie("ClientSchemaVersion");
if (Cache["SchemaVersion"] == oCookie.Value)
return true;
return false;
Если IsDbValue равно true, продолжение продолжается как обычно
Если значение равно false, позвоните по номеру LoginResetHelper.ResetLogin()
и перенаправьте на страницу входа.
В ResetLogin()
вы выполняете функции очистки, о которых я упоминал выше