Как зафиксировать уникальные сеансы пользователей на веб-страницах Webmatrix/Razor/ASP.NET?

Мне нужно регистрировать уникальные сеансы пользователей на веб-страницах Webmatrix/Razor/ASP.NET. Срабатывает ли _appstart только тогда, когда приложение запускается в первый раз в IIS, или оно срабатывает один раз для каждого уникального обращения пользователя? Если только один раз, как мне зафиксировать уникальные пользовательские сеансы и настройки?

ОБНОВЛЕНИЕ: я не был уверен, что события Global.asax запускались в Razor/ASP.NET WebPages. Я проверил это, и событие 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();

}

person Jason S. Burton    schedule 10.08.2011    source источник


Ответы (2)


Вы спрашивали о регистрации «уникальных пользовательских сеансов», что немного сбивает с толку. Все сеансы уникальны, но не все сеансы принадлежат уникальным посетителям. Вернувшиеся посетители начнут новые сеансы. Если вы хотите вести подсчет сеансов, вы можете подключиться к событию Session_Start в Global.asax. Если вы хотите подсчитать уникальных посетителей, используйте файлы cookie. Установите их, когда пользователь посещает сайт, если он еще не получил файл cookie. Убедитесь, что срок их действия истекает в будущем. Если у посетителя нет отслеживающего файла cookie для вашего сайта, он должен быть новым (или он мог удалить свой файл cookie...)

person Mike Brind    schedule 10.08.2011
comment
Я не был уверен, что события Global.asax запускались в веб-страницах Razor/ASP.NET. Я проверил это, и событие Session_Start срабатывает просто отлично. Вопрос решен. Спасибо! - person Jason S. Burton; 12.08.2011

Чтобы напрямую ответить на ваш вопрос, _AppStart запускается, когда первый пользователь попадает на ваш сайт. Будущие пользователи сайта НЕ вызывают запуск _AppStart. Нет конкретной страницы или места для размещения кода, который запускается для каждого уникального пользователя.

Что вы хотите сделать, так это взглянуть на объект сеанса ASP.Net. На своей странице вы можете хранить и извлекать данные из сеанса следующим образом:

@{
    // Retrieve
    var someSetting = Session["SomeSetting"]
    // Store
    Session["SomeSetting"] = someSetting;
}

ASP.Net позаботится о том, чтобы параметр сохранялся для каждого экземпляра браузера с использованием файлов cookie сеанса. Обратите внимание, что если вы работаете в среде веб-фермы, вам понадобится что-то более надежное, но когда вы говорите об одном сервере, это должно подойти.

Если вам нужна дополнительная информация, вот официальная документация по состоянию сеанса ASP.Net: http://msdn.microsoft.com/en-us/library/ms178581.aspx

person Andrew Stanton-Nurse    schedule 10.08.2011