Zoltán Zörgő
Вот две важные статьи MSDN:
http://support.microsoft.com/kb/317604[^]
http://support.microsoft.com/kb/311209[^]
В первом из них есть следующий абзац::
Цитата:
Если записи в таблице ASPStateTempSessions не удаляются после истечения срока действия связанных сеансов, убедитесь, что агент SQL Server запущен. Эту функциональность можно реализовать с помощью хранимых процедур, запланированных с помощью заданий в SQL Server. Этими заданиями управляет агент SQL Server.
Как вы видите, удаление выполняется заданием - таким образом, оно не будет работать с SQL Express :(
По умолчанию, если вы не задаете никакого начального каталога, данные сеанса хранятся в базе данных tempdb (со всеми вытекающими отсюда последствиями). Но вы указали другую базу данных (TEMP, то есть не tempdb). Обратите внимание на следующий абзац во второй статье:
Цитата:
Если вы заметили, что записи в таблице ASPStateTempSessions не удаляются после истечения срока действия связанных сеансов, убедитесь, что агент SQL Server запущен. Эта функция реализуется с помощью хранимых процедур, которые планируются с помощью заданий в SQL Server. Этими заданиями управляет агент SQL Server.
Конечно, вы можете реализовать и другой механизм обработки таймаута сеанса, но все это на стороне sql server. Убедитесь, что файл cookie сеанса и тайм-аут файла cookie аутентификации синхронизированы с тайм-аутом сеанса.
Теоретически вы можете не столкнуться с проблемами при длительных сеансах, но имейте в виду, что размер базы данных может увеличиться. Все зависит от количества пользователей, которых вы обслуживаете.
Zoltán Zörgő
[комментарий от ОП]
Спасибо Золтан , но разве это какой-нибудь идентификатор (сессия.SessionId) сопоставляется с таблицей ASPStateTempSessions ? если да, то я могу написать свой собственный proc, который может сопоставить идентификатор сеанса с сохраненным идентификатором сеанса внутри ASPStateTempSessions, но я думаю, что он хранит что-то другое, тогда как мы можем синхронизировать удаление, когда пользователь нажимает на кнопку выхода из системы ?
Zoltán Zörgő
1) Следуйте инструкциям в приведенных выше ссылках msdn и проверьте структуру таблицы самостоятельно.
2) Этот механизм является предопределенной функцией, поставляемой вместе с asp.net-да. Вы не должны использовать его, но если вы это сделаете, у вас есть несколько вещей, которые вы можете изменить
3) Вы можете напишите свой собственный провайдер, но это не простая задача, убедимся в этом на примере.
4) Если вы выровняете свой механизм в общей обработке сеанса asp.net, вы можете использовать общие методы аутентификации и сеанса (например Оставить), таким образом, эта "синхронизация" не является проблемой