SessionID不会通过会话保留相同的值

时间:2013-06-05 14:54:14

标签: asp.net

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

每次在应用程序中打开页面时,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" />

怎么回事?

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

修改

这是Session_Start`

的Global.asax.vb中的代码
      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

`

2 个答案:

答案 0 :(得分:3)

来自MSDN

  

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

     

如果您的应用程序使用无Cookie会话状态,则会话ID为   在第一页视图上生成并为整个页面维护   会话。

答案 1 :(得分:0)

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

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