2009-08-24 10 views
3

SQLServer SessionStateモードを使用して、ASP.NETアプリケーションにセッションを格納します。それらは、使用されるたびにシリアライズ/デシリアライズされる特定のオブジェクトを格納します。ASP.NETのすべてのユーザーのSQLセッション状態をクリアする方法

これらのオブジェクトの構造のコードを変更し、新しいバージョンをライブにすると、セッションオブジェクト(旧バージョンのもの)が構造体と一致しないため、ログに記録されたユーザーにエラーが発生します。新しいバージョンはデシリアライズ中に必要です。

DB内のすべてのセッションを一度に消去して、すべてのアクティブなセッションの有効期限が切れるようにする方法はありますか?また、ユーザーは再度ログインする必要があります(したがって、セッションオブジェクトはすべてゼロから作成されます)。

または...この状況を解決する他の方法はありますか?

+0

興味があるだけ - ユーザーが自分のクッキーをクリアして、この問題を解決するだろうか? – Tim

+1

それは可能かもしれませんが、私はユーザーから何も要求されない解決策が必要でした –

答えて

2

無効なセッションオブジェクトにヒットしたユーザーごとに、Session.AbandonまたはClearを呼び出すことができます。

また、ユーザーごとのセッションコレクションをループし、「古い」オブジェクトを含むことができるキーをクリアすることもできます。おそらくあなたはログインチケットを持っていて、クリアしたくないかもしれません。

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

あなたはすべてのセッションをクリアするには、SQL Serverでストアドプロシージャを使用してみてください可能性があります

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

RETURN 0 
+0

すばらしい解決策、ありがとう!コードで処理します –

関連する問題