类文件中访问的Session始终为首个登录用户的Session是什么原因?
问题成因
核心问题出在Portal.User类中ID字段的Shared修饰符和内联初始化写法:
- VB.NET中
Shared修饰的类成员属于类全局共享资源,在整个Web应用的应用程序域生命周期内只会初始化一次。 - 你采用的
Public Shared ID As Integer = HttpContext.Current.Session("ID")内联初始化逻辑,仅会在首次访问Portal.User.ID时执行一次,此时取到的是当日首个用户请求上下文中的Session ID值,之后该值会被缓存下来。 - 后续所有用户访问
Portal.User.ID时,不会重新触发从Session取值的逻辑,直接返回第一次初始化的固定值,因此所有用户拿到的都是首个用户的ID。
修复方案
将固定的Shared字段改为每次访问时实时取值的只读属性即可:
Public Class Portal Public Class User Public Shared ReadOnly Property ID As Integer Get Return HttpContext.Current.Session("ID") End Get End Property End Class End Class
内容的提问来源于stack exchange,提问作者brasco18
相关产品推荐
相关产品推荐

