asp.net 4.5会话丢失并在几秒钟后返回

时间:2013-03-30 18:31:50

标签: asp.net session-state iis-8

我对Windows 2012上的ASP.NET 4.5会话有一个非常奇怪的问题

描述: 会话工作正常。我浏览网站,登录,访问例如个人资料和其他使用会话的aspx页面。然后从一秒到另一个,在任何aspx页面上,会话在每个aspx页面上丢失。几秒钟后,会话又回来了。因此,如果我在问题出现之前登录,我会丢失会话值,几秒钟后他们又回来了。 每个浏览器(IE,FF,Chrome)都会发生这种情况。 我确实尝试过使用InProc,State Server,Appfabric,但是完全相同,所以必须要对.net会话处理做一些事情" toplevel"或者与IIS,无论...... 不确定,但主要是,主观上我认为请求在会议失败之前非常缓慢"丢失"。疯了,他们回来了#34;之后...所以他们并没有真正迷失。

有什么想法吗?

更新

我添加了一些debuging代码。看看登录,它最容易重现。这里的代码隐藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write("StepA/")
End Sub



Protected Sub btnSignin(ByVal sender As Object, ByVal e As EventArgs)

    Response.Write("Step0/")
    If System.Web.Security.Membership.ValidateUser(loginEmail.Value, loginPassword.Value) = True Then

        Response.Write("Step1/")

        FormsAuthentication.SetAuthCookie(loginEmail.Value, False)
        Response.Write("Step2/")

        Dim ui As New UserInfo
        Response.Write("Step3/")
        ui.InitUserInfo(loginEmail.Value)
        Response.Write("Step4/")

        If Request.UrlReferrer.OriginalString.Contains("Login.aspx") = True Then
            Response.Write("Step5/")
            Response.Redirect("/admin/Default.aspx")
        Else
            Response.Write("Step6/")
            Response.Redirect(Request.UrlReferrer.OriginalString)

        End If


    Else
        Response.Write("Step7/")
        loginfailed.Visible = True
    End If

End Sub

所以...运行所有正常的,初始负载,打印出来" stepA"。 然后登录Step0到5或6

然后,由于任何原因,会话被"丢失",上面的代码不打印出步骤0到6.看起来像点击事件不会触发。 嗯...但是,然后重新启动AppFabric Cache,哦,不知道......它有效 正如我之前写的那样...与State Server相同,然后重新启动StateServer解决问题和Inproc,重新启动IIS或应用程序解决它....

要清楚。这个会话丢失或者所有aspx页面上的问题都出现了,而不仅仅是登录。到处使用会话的地方至少

1 个答案:

答案 0 :(得分:1)

经过大量的阅读,新的遗物监测等,我发现了真正的问题和一个有效的解决方案。 这个问题与asp.net有关,直到4.5个块会话在某些情况下(例如,如果你有iframe,updatepanel等),直到页面完全加载。如果用户进入我身边的另一个页面,并且会话被阻止,则会显示所描述的结果,等待时间为x秒等。

该解决方案对我有用,x性能更好但解决了阻塞问题:

我使用Couchbase(www.couchbase.com)作为现金和会话“商店”,这个优秀的会话和缓存提供商为couchbase: https://github.com/evereq/couchbase-aspnet

重要的是,与阻止探测器相关的是配置部分:会话提供者的exclusiveAccess =“false”

我遇到的2个问题,与Win 8 Dev PC和Win 2012服务器有关。 在Win 2012上,我们需要替换一个dll,如下所述:

对于任何感兴趣的人来说,这是libtcmalloc的'包装器'的x64版本。 只需将它放在couchbase'bin'目录中,然后重新启动couchbase服务即可。

dll的x64版本 http://www.mediafire.com/?xc8nurnxjqr8klb

PS:感谢Chris Wundram的提示!

在Win 8上,这篇博客文章描述了该怎么做:

http://blogs.southworks.net/mkrikorian/2013/02/06/installing-couchbase-under-windows-8/

正如我所说,在此之后,阻止问题消失并且表现更好

相关问题