如果一个用户在第一个页面返回到客户端之前尝试访问两次ASP.NET页面会发生什么?看看下面的代码:
- 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应用程序中有这个bug.
解决方法
你的问题不是关于多线程的;它是关于SessionState的.
ASP.NET运行时使用lock to avoid overriding same session variables虽然它可以处理多个请求.
这就是为什么你没有看到错过匹配的结果.
还请看 –