但是我怎么能跟踪会话呢?
ASP.NETSession
明确定义为附加到特定用户的对象:
ASP.NET 会话状态将在有限时间窗口内来自同一浏览器的请求标识为会话,并提供一种在该会话期间保持变量值的方法。
因此,根据定义,当您访问Session
它时,它将附加到一个用户,而 ASP.NET 将为您保持同步。现在,利用这些信息,我建议您在以下期间存储您可以存储的内容Session_Start
:
protected void Session_Start(Object sender, EventArgs e)
{
var session = HttpContext.Current.Session;
session["IPAddress"] = Request.UserHostAddress;
session["LoginTime"] = DateTime.Now;
// you'll need to plug in here how you're going to determine this
session["LoginPlace"] = "something";
}
然后在Session_End
你可以这样做:
protected void Session_Start(Object sender, EventArgs e)
{
HttpContext.Current.Session["LogOutTime"] = DateTime.Now;
// and now here you can persist those values to the database because
// the session has ended
}
然后我将建议您在注销期间做一些不同的事情。不要像你现在说的那样设置这些值并将它们持久化到数据库中,而是这样做:
HttpContext.Current.Session.Abandon();
这将强制Session_End
提高,这将使您的代码具有一定的一致性。此外,它会立即清理服务器上的会话。看,当用户“注销”时,除非你真的终止了他们的会话,否则它在服务器上仍然存在,直到超时。