очистка истекших сеансов с помощью пользовательского SessionStateStoreProvider - PullRequest
1 голос
/ 20 марта 2010

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

Я ошибаюсь по этому поводу? Я не видел альтернативного примера переопределения метода SetItemExpireCallback.

1 Ответ

1 голос
/ 23 марта 2010

Да, я верю, что это правильно.

Если вы сохраняете сеансы в базе данных, то существует агент на сервере Sql, который вызывает эту процедуру каждую минуту или около того:

    DECLARE @now datetime
    SET @now = GETUTCDATE()

    DELETE ASPStateTempSessions WHERE Expires < @now

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

С другой стороны, вы можете не создавать таймер, а, когда пользователь запрашивает страницу, каждые 1-2 минуты запускать функцию для удаления просроченных страниц.

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

Надеюсь, это поможет.

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