Вот решение с использованием аффиксного плагина 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;
}
Нет встроенного механизма, потому что на самом деле вы хотите, чтобы пользователи оставались в системе дольше, чем вы хотите поддерживать их сеансы. Кроме того, сеансы не предназначены для гарантированного хранения, и вам следует избегать любой зависимости от данных, находящихся в сеансе.
Ничего не происходит на сервере по истечении срока действия cookie аутентификации. Нет отслеживаемого состояния.
У вас может быть ссылка для выхода из системы, а в обработчике Прервать
сеанс и Выход
из FormsAuthentication, но нет ничего, что заставляло бы пользователя войти из веб-сайта.
Некоторым людям нравится Session, однако большинство ненавидят или начинают ненавидеть его из-за злоупотреблений. Основные причины: чрезмерное использование сеанса, как правило, является причиной некачественной работы серверов, а неправильное использование сеанса может создавать веб-сайты, которые выиграют. шкала t.
По возможности избегайте использования сеанса, а если необходимо, следуйте рекомендациям в статье MSDN Повышение производительности ASP.NET . Также ознакомьтесь с Общие сведения о режимах состояния сеанса + FAQ и, в частности, Q: Почему не запускается Session_End?
Я слышал этот вопрос много раз, обычно я отвечаю: «Почему вы хочу это?". Одно не требует другого, и время их истечения должно определяться с использованием разных критериев.
Состояние сеанса не требует входа пользователя в систему. Приложению даже не нужно использовать аутентификацию для использования состояния сеанса. У вас может быть веб-приложение, в котором пользователь уже использует состояние сеанса еще до входа в систему и продолжает использовать его после выхода. "Сеанс" вот когда клиент (веб-браузер) подключается к сайту, прыгает по нескольким страницам и уходит. Авторизован пользователь или нет, не имеет значения. Если вы закроете браузер, откроете новый и вернетесь на сайт, будет создан новый сеанс. Но сервер не знает, что вы закрыли старое окно браузера, поэтому исходный сеанс все еще существует. В целях масштабируемости (в основном памяти) мы завершаем наши сеансы и освобождаем его память и ресурсы отслеживания сеансов. Если клиенту требуется слишком много времени для выполнения нового запроса, новый запрос создаст новый сеанс.
С другой стороны, вы можете использовать аутентификацию и не использовать состояние сеанса вообще. Обычно я запускаю свои приложения с отключенным состоянием сеанса и состоянием просмотра и включаю их только в случае необходимости и постранично (или «контроль за контролем» для состояния просмотра).
Срок действия сеанса должен определяться объемом памяти, используемой каждым сеансом, объемом памяти, доступным на веб-сервере, количеством одновременно работающих пользователей и другими потребностями в масштабируемости. Обычно это время в диапазоне от нескольких минут до часа.
Аутентификация сохраняется в виде файла cookie на клиенте и в основном не потребляет никаких ресурсов сервера. С точки зрения масштабируемости срок действия входа в систему обычно может быть больше, чем срок действия сеанса. Фактически, пользователь может оставаться в системе неограниченное время. Когда срок действия аутентификации сокращается, это обычно делается из соображений безопасности. Вы же не хотите, чтобы ваш банковский счет на веб-сайте был доступен кому-то еще, если вы отойдете от компьютера на 15 минут, верно? Вы можете войти в Gmail или Facebook и выбрать «запомнить меня» и вернуться через несколько дней, и вы все еще авторизованы. Но, конечно, это будет новый сеанс, потому что ни одно веб-приложение не должно удерживать данные сеанса в течение нескольких дней.
Я видел, что многие люди использовали одинаковый период времени для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.
Мы видели, как многие люди используют одинаковое время для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения. Мы видели, как многие люди используют одинаковое время для аутентификации и истечения срока действия сеанса. И многие также Abandon () или Clear () их сеанс, когда пользователь выходит из системы. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения. Но они забывают, однако, что вам все еще нужно управлять случаем, когда пользователь все еще вошел в систему, но сеанс истек (что создает новый пустой сеанс при следующем запросе), или когда пользователь истек срок аутентификации, но не их сеанс (требующий повторного входа в систему, но с сохранением старого сеанса, срок действия которого не истек, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения. но переносит старый сеанс с истекшим сроком действия, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения. но переносит старый сеанс с истекшим сроком действия, возможно, с конфиденциальными данными другого пользователя) . Очень важно позаботиться о таких случаях, независимо от того, какие тайм-ауты вы в конечном итоге выберете для своего приложения.Причина, по которой я иногда задаю себе этот вопрос, заключается в том, чтобы предотвратить доступ к объектам сеанса с истекшим сроком действия. Когда сеанс истекает до истечения срока входа в систему, и пользователь запрашивает страницу, которая использует данные из сеанса, возникает неприятное исключение нулевой ссылки.
Вы можете найти эту статью полезной. В нем обсуждается несколько решений для обнаружения просроченных сеансов и информирования об этом пользователя.