Shailesh vora Ответов: 3

Как удалить SessionData, когда режим SQLServer


Привет,

В Asp.net приложение я разработал одно веб-приложение, в котором я использовал режим сеанса в качестве sql server теперь в соответствии с asp.net правило когда мы используем режим sql server , .net не будет выполнять событие session_end файла glabal.asax

Итак, как очистить сеанс в режиме Sql Server ? Я имею в виду каждый раз , когда запись входит в таблицу ASPStateTempSessions, поэтому, когда и как я могу очистить ее, когда сеанс выходит из строя, или пользователь непосредственно закрывает браузер, или пользователь нажимает на кнопку выхода из системы.

Тег Web.Config-это

<sessionState allowCustomSqlDatabase="true"  mode="SQLServer"  sqlConnectionString="Data Source=SERVER;Initial Catalog=TEMP;User ID=TEST;Password=TEST">
  </sessionState>


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


заранее спасибо.

Zoltán Zörgő

Смотрите мой комментарий к вашему.

3 Ответов

Рейтинг:
25

Shailesh vora

Привет,
Спасибо за ответ,

Я получил большую часть своего ответа по этой ссылке
http://abhijitjana.net/2011/01/19/details-explanation-on-compression-enabled-session-for-sql-server-and-state-sever-session-mode-in-asp-net-4-0/#comment-11905

Событие я создал одну процедуру которая удалит данные вошедшего пользователя когда пользователь нажмет на кнопку выхода из системы

Но не смог найти решение, когда пользователь непосредственно нажимает на кнопку Закрыть (Click on X) браузера - специально нужно решение для браузера Chrome.(Когда пользователь непосредственно закрывает обзор , а затем до истечения времени сеанса данные будут сохраняться в базе данных, поэтому нужно решение, например, когда пользователь закрывает браузер, в то же время я удалю данные этого конкретного пользователя из базы данных.)

Спасибо
Шайлеш вора


Рейтинг:
1

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, вы можете использовать общие методы аутентификации и сеанса (например Оставить), таким образом, эта "синхронизация" не является проблемой

Рейтинг:
1

Member 10692231

Привет,

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

Спасибо
Гаутав Гупта
Электронная почта: grvgupta305@gmail.com


CHill60

Пожалуйста, не размещайте вопросы или комментарии в качестве решений. Используйте опцию "есть вопрос или комментарий?" ссылку на соответствующий пост.
Также имейте в виду, что это открытый сайт - размещать свою электронную почту на открытых сайтах-значит приглашать спам-ботов наводнять вашу электронную почту. Не делитесь своей электронной почтой открыто.