我有一个没有登录页面的Web窗体应用程序。从技术上讲,用户可以直接访问任何页面。但是,我需要能够识别每个页面上登录用户的身份。我不想为每个页面添加代码。我宁愿在会话开始时设置一个唯一的会话变量。为此,我将以下内容添加到我的Global.asax.cs中:
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覆盖了所有活动Sessions的loggedInUser值。
基于此链接:https://books.google.com/books?id=nQkyi4i0te0C&pg=PA202&lpg=PA202&dq=C%23+set+unique+session+variable+in+global.asax&source=bl&ots=GV9nlEUzE5&sig=E4TT3NDbjp1GwEehgU3pLXKdvr0&hl=en&sa=X&ved=0ahUKEwiU9f322tvSAhVF7yYKHYaXCtwQ6AEITzAI#v=onepage&q=C%23%20set%20unique%20session%20variable%20in%20global.asax&f=false 它说我应该能够为每个新会话设置唯一的会话变量,但我的结果没有显示。
我是否误解了这是如何运作的?我需要在每个会话开始时为每个用户设置一个唯一的会话值。
答案 0 :(得分:0)
我发现了这个问题。 Session_Start正在执行在唯一会话级别应该执行的操作。我引用会话值的方式都是错误的。而不是访问我实际上正在做的会话值:
Person loggedInUser = Global.loggedInUser;
有意义的是它正在返回最新用户以启动会话。