Как очистить состояние сеанса SQL для всех пользователей в ASP.NET - PullRequest
4 голосов
/ 24 августа 2009

Я использую режим SQLServer SessionState для хранения сессии в моем приложении ASP.NET. В нем хранятся определенные объекты, которые сериализуются / десериализуются при каждом их использовании.

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

Есть ли способ очистить все сеансы сразу в БД, чтобы срок действия всех активных сеансов истек и пользователи были вынуждены снова войти в систему (и, следовательно, все объекты сеансов созданы с нуля)?

Или ... Есть ли другой способ решить эту ситуацию?

Ответы [ 2 ]

13 голосов
/ 24 августа 2009

Вы можете попробовать использовать хранимую процедуру в SQL Server для очистки всех сеансов:

CREATE PROCEDURE [dbo].[DeleteSessions]
AS
DELETE [ASPState].dbo.ASPStateTempSessions

RETURN 0
3 голосов
/ 24 августа 2009

Вы можете вызвать Session.Abandon или Clear для каждого пользователя, когда он ударил недопустимый объект Session.

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

foreach (string key in Session.Keys)
{
  if (!key.Equals("login"))
  {
    Session.Remove(key);
  }
}
...