我需要在Webmatrix / Razor / ASP.NET网页中记录唯一的用户会话。当应用程序第一次在IIS中旋转或者每个唯一用户命中时它会触发一次时,_appstart是否会触发?如果只是一次,我如何捕获独特的用户会话和&设置?
更新:我不确定是否在Razor / ASP.NET WebPages下触发了Global.asax事件。我测试了它,Session_Start事件就好了。问题解决了。
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Dictionary<DateTime, String> d = new Dictionary<DateTime, String>();
Application.Lock();
if (Application["d"] != null)
{
d = (Dictionary<DateTime, String>)Application["d"];
}
d.Add(DateTime.Now, HttpContext.Current.Session.SessionID);
Application["d"] = d;
Application.UnLock();
}
答案 0 :(得分:3)
要直接回答您的问题,_AppStart会在第一个用户访问您的网站时运行。该站点的未来用户不会导致_AppStart运行。没有特定的页面或位置来放置为每个唯一用户运行的代码。
您要做的是查看ASP.Net Session对象。在您的页面中,您可以存储和检索Session中的数据,如下所示:
@{
// Retrieve
var someSetting = Session["SomeSetting"]
// Store
Session["SomeSetting"] = someSetting;
}
ASP.Net将负责确保使用会话Cookie在每个浏览器实例中存储该设置。请注意,如果您处于Web Farm环境中,则需要更强大的功能,但是当您谈论单个服务器时,这应该没问题。
如果您想了解更多信息,请参阅ASP.Net会话状态的官方文档:http://msdn.microsoft.com/en-us/library/ms178581.aspx
答案 1 :(得分:2)
您已经询问过记录“唯一用户会话”,这有点令人困惑。所有会话都是唯一的,但并非所有会话都属于唯一身份访问者。返回的访客将开始新的会议。如果要保留会话数,可以挂钩Global.asax中的Session_Start事件。如果您想计算唯一身份访问者,请使用Cookie。如果用户没有cookie,则在用户访问时设置它们。确保他们的到期时间是将来的一段时间。如果访问者没有为您的网站提供跟踪Cookie,则他们必须是新的(或者他们可能已删除了他们的Cookie ...)