#asp.net #session #ip-address #session-timeout
#asp.net #сеанс #ip-адрес #время ожидания сеанса
Вопрос:
Возможно ли программно установить тайм-аут сеанса для пользователя на основе IP-адреса пользователя?
Пример: если IP-адрес находится в диапазоне 192.0.X, то установите время ожидания сеанса равным 6 часам. В противном случае оставьте значение по умолчанию, установленное в web.config (или равное 30 минутам).
Предположительно, это было бы сделано в Global.asax:Session_Start
. На данный момент я был бы не против просто использовать IP-адрес первого запроса пользователя в сеансе (с учетом того факта, что пользователь может менять IP-адреса в середине сеанса).
ASP.net 3.5, IIS 7
Ответ №1:
Для проверки диапазона IP-адресов вы можете использовать: Request.UserHostAddress.StartsWith("192.0.")
.
Затем установите время ожидания с помощью Session.Timeout
свойства.
Пример C #:
if(Request.UserHostAddress.StartsWith("192.0."))
{
Session.Timeout = 360; // 6 hours
}
Сделайте это в глобальном событии: Session_Start, как вы предложили.
Ответ №2:
Вы можете установить сеанс.Свойству Timeout для сеанса присваивается значение, отличное от значения по умолчанию в коде.
Ответ №3:
вы можете изменить время ожидания сеанса в web.config, написав этот код в system.время ожидания состояния веб-сеанса = 540/> //6 часов
Ответ №4:
Я думаю, что сеанс.Свойство Timeout устанавливает время ожидания для всего приложения, а не для сеанса пользователя. Я не думаю, что у вас может быть несколько таймаутов в одном приложении.
Варианты заключаются в том, чтобы иметь два сайта / приложения, одно для пользователей с длительным временем ожидания, а другое для остальных.
Вы также можете использовать собственное управление сеансом, создав поставщика сеанса, или использовать полный пользовательский способ обработки состояния сеанса.
Другой вариант — добавить JavaScript на страницы пользователей с длительным тайм-аутом, чтобы поддерживать сеанс в рабочем состоянии. Ознакомьтесь с этой статьей
Комментарии:
1. Неправильно.
Session.Timeout
устанавливается для каждого сеанса. Если вы установитеSession.Timeout
в коде, оно будет установлено только для текущего сеанса.2. полезно знать, в документации обычно говорится о его настройке в web.config, и там это доступно для всего приложения. Но тот факт, что is является свойством объекта Session, должен был подсказать мне, что здесь это для одного конкретного сеанса.