首页 > 解决方案 > IIS 与 IIS Express 会话处理和多用户

问题描述

我们有连接到 SQL Express 数据库的多用户 ASP.Net / MVC / Entity Framework 应用程序。我们使用会话变量来识别登录到应用程序的每个用户。

当用户登录域时,会为用户设置一个新的 Session("uid") 变量。这个 uid 也被写入了一个表中——我们可以清楚地看到每个用户在登录时都有自己唯一的 uid。

问题是当 2 个用户使用他们自己的 Session("uid") 调用相同的例程时,返回的响应对于两个用户来说是相同的结果,这是不正确的。

我说每个登录到https://xyz.site:60123的用户都有自己独特的会话,我错了吗?

为什么 IIS Express 可以为相应用户的 Session("uid") 值返回不同的结果而 IIS 不能正常工作?感觉就像用户在 IIS 上共享同一个会话,这是错误的。

我们通过在同一个 https://localhost:45454 上登录 2 个调试实例来评估每个会话的唯一性。我们发现有 2 个浏览器连接到这个 localhost,两者都是唯一的,返回 2 个不同的 id,这是正确的,但是在生产中,情况似乎不是这样?

任何帮助表示赞赏。

以下是 Controller 类的代码示例:

Function LoadMyRecord(ByVal x As Integer, Optional ByVal parentType As String = "MyUniqueKey") As Boolean
        
        Dim db As New Database() ' this is a shared Entity Framework database 
        Dim us As New tblSession()

        Dim uid As Integer = Session("uid")

        If (db.tblSessions.Count(Function(m) m.UserID = uid And m.KeyName = parentType) > 0) Then
            us = db.tblSessions.First(Function(m) m.UserID = uid And m.KeyName = parentType)
            us.KeyValue = x
            db.Entry(us).State = Entity.EntityState.Modified
        End If

        db.SaveChanges()
        HttpContext.Session("UserKey:" + parentType) = x ' This is producing the same result as another user instance WHY?

        Return True
    End Function

标签: asp.net-mvcvb.netiis

解决方案


推荐阅读