Как установить время ожидания сеанса в web.config


180

Я очень старался, но не могу найти решение о том, как установить значение времени ожидания сеанса для сеанса в процессе для веб-приложения ASP.Net.

Я использую VSTS 2008 + .Net 3.5 + C #. Вот что я написал сам, чтобы установить тайм-аут равным 1 минуте, это правильно?

Я написал в разделе system.web в web.config

<sessionState timeout="1" mode="InProc" />

5
То, как вы определяете время ожидания, является правильным. Есть ли у вас проблемы с этим?
Дарин Димитров

7
Вы знаете, что это означает, что он истечет через 1 минуту бездействия, а не через 1 минуту после его запуска? Я предполагаю, что если вы задаете этот вопрос и правильно ввели время ожидания, вы можете ввести в заблуждение относительно его работы.
Иван Златанов

1
Мне нужно установить неактивное время, это как раз то, что мне нужно. Спасибо Иван!
George2

РЖУНИМАГУ! Я бы не рекомендовал устанавливать время ожидания только на 1 минуту. Это убьет удобство использования!
Брайан Маккарти

3
Я полностью понимаю необходимость короткого периода ожидания. В моем случае это проверка юзабилити сайта, если время сеанса истекло и как он реагирует, когда пользователь возвращается. Трудно проверить это во время отладки, если время ожидания сеанса не наступит быстро
Бретт Вебер,

Ответы:


323

Если вы хотите установить тайм-аут на 20 минут, используйте что-то вроде этого:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 минут или часов? (timeout = "20")
Мухаммед Авайс

21
Конфиг указывает время ожидания в минутах, так что 20 минут
Wolfwyrd

50

Значение, которое вы устанавливаете в timeout атрибуте, является одним из правильных способов установить значение времени ожидания сеанса.

timeout атрибут определяет количество минут сеанс может быть неактивным до его отказались. Значением по умолчанию для этого атрибута является 20.

Присваивая этому атрибуту значение 1, вы устанавливаете отмену сеанса через 1 минуту после его простоя.

Чтобы проверить это, создайте простую страницу aspx и напишите этот код в событии Page_Load,

Response.Write(Session.SessionID);

Откройте браузер и перейдите на эту страницу. Идентификатор сессии будет напечатан. Подождите минуту, чтобы пройти, затем нажмите обновить. Идентификатор сессии изменится.

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

Session["UserId"] = 1;

Теперь вам нужно выполнить проверку на каждой странице для этой переменной следующим образом:

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Это простой пример того, как это будет работать.

Но для создания безопасных приложений производственного качества используйте классы ролей и членства, предоставляемые ASP.NET. Они обеспечивают проверку подлинности на основе форм, которая гораздо более надежна, чем обычная проверка подлинности на основе сеансов, которую вы пытаетесь использовать.


Отличный совет ... Обязательно сначала установите переменную Session перед тестированием с помощью Response.Write (Session.SessionID); в противном случае он будет обновляться с новым идентификатором при каждом обновлении.
Крис Катиньяни

1

Если вы используете MVC, вы помещаете это в файл web.config в корневом каталоге веб-приложения, а не в web.config в каталоге Views. Он также должен быть в узле system.web, а не под тем, что Джордж2 сказал в своем вопросе: «Я написал в разделе system.web в web.config»

Значение параметра тайм-аута представляет минуты.

Есть другие атрибуты, которые можно установить в элементе sessionState. Вы можете найти информацию здесь: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Затем вы можете отследить начало нового сеанса в файле Global.asax, добавив следующий метод:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

Используйте это в web.config:

<sessionState 

  timeout="20" 
/>

30
Вам не нужно большинство атрибутов, которые вы перечисляете, просто на timeoutсамом деле. stateConnectionStringи sqlConnectionStringигнорируются, когда mode="InProc"и значения для modeи cookielessустановлены в их значения по умолчанию. Итак, это действительно связано с ответом Wolfwyrd.
Arcain

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.