3

最初のページがクライアントに返される前に、1人のユーザーがASP.NETページに2回アクセスしようとするとどうなりますか?以下のコードをご覧ください。

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Session("ID") = 1
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Response.Redirect("Default3.aspx")
    End Sub End Class

Partial Class Default2
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Session("ID") = 2
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Response.Redirect("Default3.aspx")
    End Sub
End Class

Imports System.Threading
Partial Class Default3
    Inherits System.Web.UI.Page

    Dim intTest As Integer = 0

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        For intTest = 0 To 10
            Response.Write(Session("ID") & " " & intTest & "<br>")
            Thread.Sleep(1000)
        Next
    End Sub
End Class

default.aspx(ボタンをクリックする)とdefault2.aspx(ボタンをクリックする)から同じクライアント(PC)からdefault3.axpxに同時にアクセスすると、両方の要求でセッション変数が同じになります(ただし、変数を1に設定しました)最初のリクエストと2番目のリクエスト)。スレッド化せずにこの動作を複製することは可能ですか?スレッドを使用しないasp.netアプリケーションにこのバグがあると思います。

4

2 に答える 2

0

セッション情報はアプリケーションレベルで保存され、実際にはページとは直接関係がないことを理解することが重要です。

クラス内のグローバル変数と比較できます。すべてのメソッドがこの変数の読み取りと書き込みを行っている場合、最後に更新されたときの情報が常に含まれます。何回、どのメソッドで更新したかは関係ありません。

コードでこれを確認できるように、1つのプロパティを持つ新しいクラスを作成します。セッション変数をこのクラスのオブジェクトに変更します。文字列ではなくこのオブジェクトを参照するようにセッションロジックを変更し、プロパティを更新します。

最後に、プロパティのセッターにブレークポイントを設定します。

これにより、セッション変数が更新されるたびに、どのような値で更新されるかを確認できます。スタックトレースを表示して、何が設定されているかを確認することもできます。

-これはすべて、ファームをこれに導入しておらず、さまざまなマシンからセッションにアクセスしていることを前提としています-

于 2012-10-19T20:45:34.177 に答える
0

ここに画像の説明を入力してください

あなたの質問はマルチスレッドについてではありません。それはSessionStateについてです。

ASP.NETランタイムは、複数の要求を処理できますが、ロックを使用して同じセッション変数をオーバーライドしないようにします。

これが、不一致の結果が表示されない理由です。

こちらもご覧ください-

ASP.NETアプリケーションとページのライフサイクル

ASP.NETアプリケーションのライフサイクルの概要

于 2012-10-19T20:07:30.640 に答える