Как синхронизировать время жизни cookie аутентификации форм и Asp. Сетевая Сессия?

Вот решение с использованием аффиксного плагина Bootstrap:

HTML:

<header class="container-fluid">
    ...
</header>
<nav class="navbar navbar-default navbar-static-top" role="navigation">
    ...
</nav>

Javascript:

$('nav').affix({
      offset: {
        top: $('header').height()
      }
});

Установите для padding-top значение body, равное высоте вашего nav, чтобы содержимое, наложенное фиксированной панелью навигации, было видно.

$('nav').on('affix.bs.affix', function (){
     $('body').css('margin-top', $('nav').height());
});

$('nav').on('affix-top.bs.affix', function (){
     $('body').css('margin-top', 0);
});

Чтобы заставить nav удерживаться сверху при прокрутке, добавьте этот бит CSS.

CSS:

.affix
{
    top: 0;
}
12
задан Malachi 21 December 2012 в 15:15
поделиться

3 ответа

Нет встроенного механизма, потому что на самом деле вы хотите, чтобы пользователи оставались в системе дольше, чем вы хотите поддерживать их сеансы. Кроме того, сеансы не предназначены для гарантированного хранения, и вам следует избегать любой зависимости от данных, находящихся в сеансе.

Ничего не происходит на сервере по истечении срока действия cookie аутентификации. Нет отслеживаемого состояния.

У вас может быть ссылка для выхода из системы, а в обработчике Прервать сеанс и Выход из FormsAuthentication, но нет ничего, что заставляло бы пользователя войти из веб-сайта.

Некоторым людям нравится Session, однако большинство ненавидят или начинают ненавидеть его из-за злоупотреблений. Основные причины: чрезмерное использование сеанса, как правило, является причиной некачественной работы серверов, а неправильное использование сеанса может создавать веб-сайты, которые выиграют. шкала t.

По возможности избегайте использования сеанса, а если необходимо, следуйте рекомендациям в статье MSDN Повышение производительности ASP.NET . Также ознакомьтесь с Общие сведения о режимах состояния сеанса + FAQ и, в частности, Q: Почему не запускается Session_End?

6
ответ дан 2 December 2019 в 18:20
поделиться

Я слышал этот вопрос много раз, обычно я отвечаю: «Почему вы хочу это?". Одно не требует другого, и время их истечения должно определяться с использованием разных критериев.

Состояние сеанса не требует входа пользователя в систему. Приложению даже не нужно использовать аутентификацию для использования состояния сеанса. У вас может быть веб-приложение, в котором пользователь уже использует состояние сеанса еще до входа в систему и продолжает использовать его после выхода. "Сеанс" вот когда клиент (веб-браузер) подключается к сайту, прыгает по нескольким страницам и уходит. Авторизован пользователь или нет, не имеет значения. Если вы закроете браузер, откроете новый и вернетесь на сайт, будет создан новый сеанс. Но сервер не знает, что вы закрыли старое окно браузера, поэтому исходный сеанс все еще существует. В целях масштабируемости (в основном памяти) мы завершаем наши сеансы и освобождаем его память и ресурсы отслеживания сеансов. Если клиенту требуется слишком много времени для выполнения нового запроса, новый запрос создаст новый сеанс.

С другой стороны, вы можете использовать аутентификацию и не использовать состояние сеанса вообще. Обычно я запускаю свои приложения с отключенным состоянием сеанса и состоянием просмотра и включаю их только в случае необходимости и постранично (или «контроль за контролем» для состояния просмотра).

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

Аутентификация сохраняется в виде файла cookie на клиенте и в основном не потребляет никаких ресурсов сервера. С точки зрения масштабируемости срок действия входа в систему обычно может быть больше, чем срок действия сеанса. Фактически, пользователь может оставаться в системе неограниченное время. Когда срок действия аутентификации сокращается, это обычно делается из соображений безопасности. Вы же не хотите, чтобы ваш банковский счет на веб-сайте был доступен кому-то еще, если вы отойдете от компьютера на 15 минут, верно? Вы можете войти в Gmail или Facebook и выбрать «запомнить меня» и вернуться через несколько дней, и вы все еще авторизованы. Но, конечно, это будет новый сеанс, потому что ни одно веб-приложение не должно удерживать данные сеанса в течение нескольких дней.

Я видел, что многие люди использовали одинаковый период времени для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

Мы видели, как многие люди используют одинаковое время для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

Мы видели, как многие люди используют одинаковое время для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

но переносит старый сеанс с истекшим сроком действия, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

но переносит старый сеанс с истекшим сроком действия, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.

10
ответ дан 2 December 2019 в 18:20
поделиться

Причина, по которой я иногда задаю себе этот вопрос, заключается в том, чтобы предотвратить доступ к объектам сеанса с истекшим сроком действия. Когда сеанс истекает до истечения срока входа в систему, и пользователь запрашивает страницу, которая использует данные из сеанса, возникает неприятное исключение нулевой ссылки.

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

4
ответ дан 2 December 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: