我有一个严格的问题,我不知道如何解决。
每次在应用程序中打开页面时,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
`
答案 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