0

我有一个奇怪的问题,我不知道如何解决。

每次我在应用程序中打开页面时,sessionID 都会不断变化。但是当我调试程序时,sessionID 保持不变并且不会改变

该应用程序安装在 Windows server 2008 R2(iis 7.5 和 dotnet framework 4.0)上

<sessionState cookieless="UseCookies" mode="InProc" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" stateConnectionString="tcpip=127.0.0.1:42424" timeout="60" />

有什么事?

注意:这在我的本地开发机器上运行良好。

编辑

这是 Global.asax.vb 中 Session_Start 的代码

      Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        Session("mySessions") = "junk"
        AddMySessions()

        If User.Identity.IsAuthenticated Then
            Dim cmd As New SqlCommand
            Dim sql As String

            sql = String.Format("SELECT EmpID FROM Intranet_Employees WHERE Username='{0}'", sUserName)
            cmd.CommandText = sql

            ' Production ...
            Session("EmpID") = CType(Dao.ExecuteScalar(cmd, ConfigurationSettings.AppSettings("cSqlTemplateDB")), String)
            Dim oEmpInfo As New TOrders.Data.Objects.Employee(Convert.ToInt64(Session("EmpID")))
            Session("EmpInfo") = oEmpInfo

            If Application("SessionCount") Is Nothing Then
                Application.Lock()
                Application("SessionCount") = 0
                Application.UnLock()
            End If

            Application.Lock()
            Application("SessionCount") += 1
            Application.UnLock()
        Else
            Response.Redirect("http://intranet/tsystem")
        End If

    End Sub


      Private Sub AddMySessions()
        Dim sMsg As String = Session.SessionID & ";" & Now.ToString & ";" &       Request.ServerVariables.Get("AUTH_USER").ToString

        If IsNothing(Application("mySessions")) Then
            Dim arrSessions As New ArrayList

            arrSessions.Add(sMsg)

            Application.UnLock()
            Application("mySessions") = arrSessions
            Application.Lock()

            arrSessions = Nothing
        Else
            Dim arrTemp As ArrayList = CType(Application("mySessions"), ArrayList)

            arrTemp.Add(sMsg)

            Application.UnLock()
            Application("mySessions") = arrTemp
            Application.Lock()

            arrTemp = Nothing
        End If

        sMsg = Nothing
    End Sub

`

4

2 回答 2

3

来自MSDN

使用基于 cookie 的会话状态时,ASP.NET 在使用 Session 对象之前不会为会话数据分配存储空间。因此,在访问会话对象之前,会为每个页面请求生成一个新的会话 ID。如果您的应用程序需要整个会话的静态会话 ID,您可以在应用程序的 Global.asax 文件中实现 Session_Start 方法并将数据存储在 Session 对象中以修复会话 ID,或者您可以在您的另一部分中使用代码应用程序将数据显式存储在 Session 对象中。

如果您的应用程序使用无 cookie 会话状态,则会话 ID 会在第一个页面查看时生成,并在整个会话期间保持不变。

于 2013-06-05T15:02:58.287 回答
0

经过一个多星期的挫折,我终于弄明白了。问题不在于代码或 web.config,而在于服务器的命名。服务器名称包含阻止 cookie 的下划线“_”。服务器名称已更改,一切正常。@fnostro - 感谢您的耐心和建议。

这是来自微软的链接。 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q316112

于 2013-06-07T16:21:44.377 回答