C# 在应用程序级别设置唯一会话变量
我有一个没有登录页面的Web表单应用程序。从技术上讲,用户可以直接访问任何页面。但是,我需要能够识别每个页面上的登录用户。我不想给每个页面添加代码。我宁愿在会话开始时设置一个唯一的会话变量。为此,我在Global.asax.cs中添加了以下内容:C# 在应用程序级别设置唯一会话变量,c#,webforms,session-state,global-asax,C#,Webforms,Session State,Global Asax,我有一个没有登录页面的Web表单应用程序。从技术上讲,用户可以直接访问任何页面。但是,我需要能够识别每个页面上的登录用户。我不想给每个页面添加代码。我宁愿在会话开始时设置一个唯一的会话变量。为此,我在Global.asax.cs中添加了以下内容: protected void Session_Start(object sender, EventArgs e) { if (Session["LoggedInU
protected void Session_Start(object sender, EventArgs e)
{
if (Session["LoggedInUser"] == null)
{
string networkId = HttpContext.Current.User.Identity.Name;
using (UnitOfWork unit = new UnitOfWork())
{
if (networkId.IndexOf("HLM\\") > -1) { networkId = networkId.Substring(4, networkId.Length - 4); }
loggedInUser = unit.PersonRepository.GetByNetworkID(networkId);
Session["LoggedInUser"] = loggedInUser;
}
}
else
{
loggedInUser = (Person)Session["LoggedInUser"];
}
}
我现在看到它将loggedInUser设置为上次创建会话的任何用户。也就是说,如果Mike访问该站点,他将看到表示他是loggedInUser的数据。然而,如果凯特在他之后去网站,迈克现在会看到凯特的数据。基本上,中的最后一个会覆盖所有人的设置,而Session_Start会覆盖所有活动会话的loggedInUser值
基于此链接:
它说我应该能够为每个新会话设置唯一的会话变量,但我的结果没有显示这一点
我是不是误解了这是怎么回事?我需要在每个会话开始时为每个用户设置一个唯一的会话值 我发现了这个问题。会话_Start在一个独特的会话级别执行本应执行的操作。我引用会话值的方式完全错误。我没有访问会话值,而是实际执行以下操作: Person loggedInUser=Global.loggedInUser
这很有意义,因为它返回了最新的用户来启动会话。我发现了问题。会话_Start在一个独特的会话级别执行本应执行的操作。我引用会话值的方式完全错误。我没有访问会话值,而是实际执行以下操作: Person loggedInUser=Global.loggedInUser 它返回最新用户以启动会话,这很有意义。loggedInUser是global.asax的静态成员吗?!“loggedInUser”是你的global.asax的静态成员吗?!