私が取り組んでいるシステムでは、ユーザーのログイン/ログアウトに標準のASP.NET認証/メンバーシップ機能は使用されません。したがって、セッションのトラッピング/ハイジャックを防ぐために、ユーザーをログインした後、ユーザーに新しいセッションIDを発行します。私が持っている問題は、新しいIDで新しいセッションを作成し、新しく作成したセッションにさまざまなコンポーネントをコピーすることができました。セッション["値"]。下に抜粋したコードの最後には、新しく作成されたセッションが現在のHTTPContextのセッションであり、全体にコピーされたセッション値があります。しかし、Response.Redirectを実行した後、新しいセッションが動作していますが、セッション["値"]のいずれも2つの要求にまたがって持続しませんでした。以下のコードからわかるように、いくつかのコレクションに値を追加しようとしました。新しく作成されたセッションでセッションの内容が保持されない
何か助けが素晴らしいだろう!おかげで、事前に
bool IsAdded = false;
bool IsRedirect = false;
HttpSessionState state = HttpContext.Current.Session;
SessionIDManager manager = new SessionIDManager();
HttpStaticObjectsCollection staticObjects = SessionStateUtility.GetSessionStaticObjects(HttpContext.Current);
SessionStateItemCollection items = new SessionStateItemCollection();
foreach (string item in HttpContext.Current.Session.Contents)
{
var a = HttpContext.Current.Session.Contents[item];
items[item] = a;
}
HttpSessionStateContainer newSession = new HttpSessionStateContainer(
manager.CreateSessionID(HttpContext.Current),
items,
staticObjects,
state.Timeout,
true,
state.CookieMode,
state.Mode,
state.IsReadOnly);
foreach (string item in HttpContext.Current.Session.Contents)
{
var a = HttpContext.Current.Session.Contents[item];
newSession.Add(item,a);
}
SessionStateUtility.RemoveHttpSessionStateFromContext(HttpContext.Current);
SessionStateUtility.AddHttpSessionStateToContext(HttpContext.Current, newSession);
manager.RemoveSessionID(HttpContext.Current);
manager.SaveSessionID(HttpContext.Current, newSession.SessionID, out IsRedirect, out IsAdded);
return newSession.SessionID;
いいえ、これは新しいセッションです(この要求中に作成されるため)。セッションに追加された値はすべて失われます。 Response.redirect(page、false) – MiiisterJim