Как я явно устанавливаю сессии asp.net, чтобы ТОЛЬКО истечь при закрытии браузера или явного logou?

Установите тип содержимого с помощью header('Content-type: application/json');, а затем эхо-данные.

6
задан 6 revs, 2 users 79% 18 September 2008 в 16:31
поделиться

9 ответов

Если Вы хотите расширить сессию вне 20 минут, Вы изменяете значение по умолчанию с помощью администратора IIS, или можно установить его в web.config файле. Например, для установки тайм-аута на 60 минут в web.config:

<configuration>
  <system.web>
    <sessionState timeout="60" />
    ... other elements omitted ...
  </system.web>
  ... other elements omitted ....
</configuration>

Можно сделать то же для конкретного пользователя в коде с:

Session.Timeout = 60

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

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

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

6
ответ дан 8 December 2019 в 17:31
поделиться

Это - значение по умолчанию. Когда у Вас есть сессия, она хранит сессию в "Сеансовых куки", которые автоматически удалены, когда браузер закрывается.

Если Вы хотите иметь сессию между 2 сеансами браузера, необходимо установить Cookie. Истекший на дату в функции.

Поскольку сессия, о которой Вы говорите, хранится сервером а не клиентом, Вы не можете сделать то, что Вы хотите.

Но считайте не использование серверной сессией ASP.NET, и вместо этого только полагайтесь на cookie.

1
ответ дан 8 December 2019 в 17:31
поделиться

Вы могли установить короткий тайм-аут сессии (например, 5 минут) и затем заставить страницу периодически опрашивать сервер, или при помощи JavaScript для увольнения XmlHttpRequest каждые 2 минуты, или при наличии скрытого iframe, который указывает на страницу, которая обновляет себя каждые 2 минуты.

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

3
ответ дан 8 December 2019 в 17:31
поделиться

Это не новая проблема, существует несколько сценариев, которые должны быть обработаны, если Вы хотите поймать все способы, которыми может закончиться сессия, вот общие примеры некоторых из них:

  1. Экземпляр браузера или вкладка закрываются.
  2. Пользователь перешел далеко от Вашего веб-сайта с помощью того же экземпляра браузера или вкладки.
  3. Пользователи теряют свое соединение с Интернетом (это могло включать потери мощности в компьютер пользователя или любые другие средства).
  4. Пользователь убегает от компьютера (или некоторым другим способом прекращает взаимодействовать с Вашим сайтом).
  5. Сервер теряет питание/перезагрузки.

Первые два объекта должны быть обработаны клиентом, отправляющим информацию на сервер, обычно Вы использовали бы JavaScript для навигации к странице выхода из системы, которая быстро истекает сессия.

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

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

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

3
ответ дан 8 December 2019 в 17:31
поделиться

К сожалению, из-за явного характера сети и факта там не постоянная ссылка между сервером веб-сайта и пользовательским браузером, который невозможно сказать, когда пользователь закрыл их браузер. Существуют события и JavaScript, который можно реализовать (например, onunload), который можно использовать для места, перезванивает к серверу, который в свою очередь мог 'уничтожить' сессию - Session.Abandon();

Можно установить продолжительность тайм-аута сессии в web.config, помнить, что этот тайм-аут основан на времени, так как последняя возможность к серверу была помещена пользовательским браузером.

Браузер timedout не сделал добавленный.

1
ответ дан 8 December 2019 в 17:31
поделиться

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

Мой JavaScript не достаточно хорош, чтобы дать Вам фактические инструкции сделать это; извините :(

0
ответ дан 8 December 2019 в 17:31
поделиться

О, Вы переписали вопрос.

Тот абсолютно выполним, пока JavaScript жив. Используйте любой синхронизировал ajax, сделает. Согласуйте с опытной библиотекой http://www.prototypejs.org PeriodicalExecutor или jQuery с ajax + плагин таймера. Установите фиктивную страницу, которую Ваш исполнитель будет время от времени называть, таким образом, Ваша сессия будет всегда жива если, если он выходит из системы (уничтожают ajax таймер в то же время), или близкий браузер (то, что означает исполнителя, уничтожается так или иначе),

0
ответ дан 8 December 2019 в 17:31
поделиться

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

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

Однако предпочтительный подход должен использовать механизм постоянного состояния с тем же объемом как сеанс браузера, такой как cookie, который истекает, когда браузер закрывается. Тот cookie мог содержать как раз достаточно информации, чтобы повторно инициировать сессию на сервере, если это истекло начиная с последнего запроса. Объединенный с относительно коротким (5-10 минут) тайм-аут сессии, я думаю, что это дает Вам лучший баланс между использованием ресурсов сервера и тем, чтобы не заставлять пользователя постоянно "перезагрузить" сайт.

0
ответ дан 8 December 2019 в 17:31
поделиться

Вы наклоняетесь, поскольку Вы не можете управлять как клиентский ответ HTML.

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

0
ответ дан 8 December 2019 в 17:31
поделиться
Другие вопросы по тегам:

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