заставить пользователей выйти - PullRequest
0 голосов
/ 15 января 2010

В настоящее время у меня есть веб-страница клиента и администратора. Есть несколько пользователей, которые будут входить на страницу клиента. На странице администратора, когда я восстановил базу данных на странице администратора, мне нужно выйти из системы всех пользователей, которые в данный момент входят в клиентскую страницу. Есть идеи как это сделать? Мой текущий язык - классический ASP. Если это можно сделать в ASP.NET, это тоже хорошо. Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 января 2010

Это действительно зависит от того, что вы кэшировали. Если это данные, вы можете очистить кэшированные данные, не заставляя своих пользователей снова войти в систему.

Если это изменение данных или разрешений / безопасности, то в вашей базе данных может быть параметр 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() вы выполняете функции очистки, о которых я упоминал выше

0 голосов
/ 15 января 2010

Возможно, самый простой способ - определить переменную Application, указывающую, что ваш веб-сайт находится в процессе обслуживания, и на каждой странице через серверную часть включить эту переменную и перенаправить на соответствующую страницу ошибки.

...