Ведение сессии в течение дня - PullRequest
1 голос
/ 26 октября 2010

Мне нужно вести сеанс в течение дня? По истечении или до истечения сеанса, как мне принудительно установить сеанс в течение дня, не задавая тайм-аут сеанса в IIS или web.config?

Примечание. Время ожидания сеанса по умолчанию в IIS - 20 минут.

Заранее спасибо

Ответы [ 6 ]

1 голос
/ 26 октября 2010

Первое, что вы можете сделать, это отделить сеанс от процесса с помощью сервера состояний сеанса SQL (или другой базы данных), который содержит сериализованную копию данных сеанса, прикрепленных к идентификатору сеанса. Затем вы можете использовать постоянный файл cookie для передачи идентификатора сеанса назад и вперед. Любая сессия, срок действия которой истекает, может быть восстановлена ​​или восстановлена.

Поскольку вы хотите поддерживать сеанс весь день (что небезопасно), мы будем предполагать, что большинство соображений безопасности уже отброшено. Если вас беспокоят повторные атаки, вы можете использовать HMAC для проверки запросов сеансов cookie, указав идентификатор сеанса, дату и время пользователя (если это часть ваших данных), возможно, IP-адрес в строке, за которым следует односторонний соленый хеш этих данных. Таким образом, вы переферируете данные и сравниваете хеш, отправленный с запросом, сгенерированный хеш из этих данных, чтобы увидеть, действителен ли запрос.

1 голос
/ 26 октября 2010

Принудительное обновление страницы каждые 10 минут или около того с помощью JavaScript.Тайм-ауты сеанса показывают, как долго после последней запрошенной страницы сеанс становится недействительным.Когда вы обновляете страницу каждые 10 минут или около того, сеанс продлевается на 20 минут при каждом обновлении.

0 голосов
/ 26 октября 2010

положить вызов ajax в таймер, метод, который ничего не делает "", так что даже если пользователь находится на странице, но ничего не делает, значит "полностью неактивен", не выйдет из системы, мы реализовали ту же логикуи решили нашу проблему, наша цель была от 3 до 4 часов, и мы не хотели менять значение в web.config или использовать другой способ по какой-либо причине.

, что вызов ajax будет в "таймер ", установите время таймера на" любое ".

0 голосов
/ 26 октября 2010

Петер на правильном пути - делает ложные запросы, чтобы сохранить жизнь.Вы определенно не хотите обновлять страницу, что приводит к нежелательным обновлениям и тому подобное.Вам даже не нужно обновлять часть страницы.Вам просто нужно отправлять ajax-запрос каждые X минут, пока у пользователя открыт браузер для IHttpHandler, у которого действительно включено состояние сеанса.Это очень, очень эффективно - у нас есть одно приложение, которое полностью зависит от сеансов для всего, что имеет 5-минутный тайм-аут сеанса.И сердцебиение сеанса, которое срабатывает каждые 4,5 минуты.Он был в производстве более 3 лет, и мы еще не потеряли сессию.И да, в этом случае состояние сеанса сохраняется в процессе - использование сеансов настолько интенсивно, что мы не хотим ждать, пока они выйдут в SQL и обратно.

PS: protip - makeобязательно сделайте запрос и ответ уникальным;в некоторых браузерах происходит кэширование, что делает этот трюк неэффективным.

0 голосов
/ 26 октября 2010

Используйте StateServer вместо InProc

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

Я считаю, что это единственное жизнеспособное решение.

0 голосов
/ 26 октября 2010

Если вы отказываетесь изменить настройку в файле web.config на большее значение, вы можете попытаться принудительно обновить браузер в течение короткого времени ожидания сеанса (например, 17 минут). Там могут быть другие изящные способы.

Если вы сможете найти способ обойтись без сеанса, это избавит вас от боли позже. Либо используйте стратегию кэширования (memcached), либо посмотрите на использование вашего ресурса.

например. Вам действительно нужно сериализовать X в сеанс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...