Установите ASP.net Тайм-аут сеанса на основе IP-адреса

#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, должен был подсказать мне, что здесь это для одного конкретного сеанса.