3

セッションを再起動する更新ボタンをクリックします。

protected void btnRefresh_Click(object sender, EventArgs e)
{

    HttpContext.Current.Session.Abandon();
    HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
    mycookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(mycookie);
    LblSessionID.Text = HttpContext.Current.Session.SessionID+
        " test btnRefresh_Click";
    LblIsNewSession.Text = Session.IsNewSession.ToString();
}

ただし、ボタンがクリックされると、SessionID 値はLblSessionID引き続き古い値を表示しますが、別のラベルLblIsNewSessionでは IsNewSession に対して true として表示されます。次にLblSessionID、SessionID が保持されている asp.net コントロール (ドロップダウンなど) を使用すると、実際の SessionID 値が反映さautopostback="true"れます。

私はglobal.asaxを使用します

LblSessionID次のポストバックが実際の値を反映し始めるのを待っている理由は何ですか?

Web アプリケーションを起動すると、問題は同じです。LblSessionID異なる値を表示し、最初のポストバック後に変更し、そこから同じままです。

4

4 に答える 4

2

それが機能する方法です-Abandonセッションの場合、次のリクエストまでそれが反映されません。考えてみれば当たり前ですが…

あなたのサイトにアクセスしてセッション ID を取得するユーザーがいるとします123(実際の値を反映していません)。ボタンをクリックして新しいセッション ID を取得すると、ユーザーのリクエストは古いセッションからのものであり、その値がその中に反映されRequestます。セッションがリセットされる (または放棄されるなど) と、ユーザーは の新しいセッション ID を取得し、321後続Requestの はその新しいセッション ID を反映します。

于 2012-11-30T17:59:12.920 に答える
0

セッションに実際に何か (何か) を保存しない限り、SessionId は信頼できません。

于 2012-11-30T17:50:48.877 に答える
0

試す

   Session.RemoveAll();

    Session.Clear(); 
于 2012-11-30T17:51:39.533 に答える
0

それはあなたのコードではなく、文書化された動作です 。 Abandon メソッドを呼び出した後もセッション オブジェクトを使用できます。ページの処理が完了するとすぐに、セッションは削除されます。" (ソース: http://support.microsoft.com/kb/899918 )

Abandon() メソッドは、リクエストの最後にクリアするようにセッション コレクションにフラグを立てますが、実際にはすぐにはクリアしません。

オブジェクトを即座に削除するには、RemoveAll() または Clear() メソッドを呼び出すか、ページ自体に Response.Redirect 呼び出しを発行して、データの存在を再テストします。

于 2014-01-31T13:21:18.933 に答える