1

我需要在 Webmatrix / Razor / ASP.NET 网页中记录唯一的用户会话。_appstart 是否仅在应用程序在 IIS 中第一次启动时触发,还是在每个唯一用户点击时触发一次?如果只有一次,我如何捕获唯一的用户会话和设置?

更新:我不确定是否在 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();

}
4

2 回答 2

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

于 2011-08-10T05:33:21.420 回答
2

您询问了有关记录“唯一用户会话”的问题,这有点令人困惑。所有会话都是唯一的,但并非所有会话都属于唯一访问者。回头客将开始新的会议。如果您想保留会话计数,您可以挂钩 Global.asax 中的 Session_Start 事件。如果您想计算唯一身份访问者,请使用 cookie。如果用户尚未获得 cookie,请在用户访问时设置它们。确保它们的到期时间在未来一段时间内。如果访问者没有您网站的跟踪 cookie,他们一定是新的(或者他们可能已经删除了他们的 cookie...)

于 2011-08-10T19:10:17.403 回答