如何在Webmatrix / Razor / ASP.NET网页中捕获唯一的用户会话?

时间:2011-08-10 04:28:22

标签: razor webmatrix asp.net-webpages

我需要在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();

}

2 个答案:

答案 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 ...)