2011-08-03 11 views
0

私が取り組んでいるシステムでは、ユーザーのログイン/ログアウトに標準の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; 

答えて

0

基本的には1ラウンドがあった後、あなたが唯一のセッション変数を追加することができますので、それは不可能です表示されます対応するセッションCookieを作成するためにクライアントに移動します。したがって、セッション変数を追加する頃には、クライアントのCookieに適切なセッションIDが設定されていたので、新しいセッションIDを作成する必要がありました。認証された。

興味深いことに、新しいセッションIDを発行することは、標準のasp.net認証/メンバーシップ機能とまったく同じですが、セッション変数を維持することはできますが、手動ではしません...私たちに単なる開発者にさらされていないかもしれないいくつかの方法があります。

0

たぶん私はここに何かが欠けていますが、この作品ではないだろう。

Session["mysession"] = mySessionObject; 
+0

いいえ、これは新しいセッションです(この要求中に作成されるため)。セッションに追加された値はすべて失われます。 Response.redirect(page、false) – MiiisterJim

関連する問題