asp.net mvc 2: онлайн пользователь - PullRequest
0 голосов
/ 15 июля 2010

В asp.net mvc2, как я могу показать статус пользователя как «онлайн»?

Так что, если пользователь активно работает на сайте, статус будет «онлайн».

если пользователь отошел от сайта примерно на 5 минут, то это будет "5 минут".

если пользователь отошел от сайта примерно на 10 минут, тогда это будет "10 минут".

И так далее, и тому подобное.

Каков наилучший способ сделать это? Любой пример кода будет очень полезным для меня.

Ответы на данный момент предполагают, что я использовал Ajax. Если так, то как бы я мог опрашивать онлайн-пользователей против автономных пользователей. Все мои запросы идут против базы данных. Можно ли запрашивать и отображать результаты, объединяя результаты Ajax с запросами к базе данных?

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Я думаю, что самый простой способ сделать это - использовать переменную сеанса. Вы можете добавить строку в ваши контроллеры (либо в методе действия, либо в конструкторе, либо даже, возможно, с фильтром действия), который хранит текущую дату / время в сеансе. Затем вы можете использовать ajax-вызов для обновления значения на экране через определенный интервал. Возможно, вы захотите сделать интервал в минутах, а не в секундах, иначе вы бы отобразили счетчик (то есть «1 секунда», «2 секунды» и т. Д.).

Некоторые быстрые примеры кода:

// Somewhere in controller
Session["LastSeen"] = DateTime.Now;

// Now, an action that would return the amount of time since the user was last seen
public ViewResult GetLastSeenTime()
{
    return Json(new { TimeAway = Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes});
}

// Then on your page, something like this
$.post("/Controller/GetLastSeenTime",null,function(result) {
    if(result.LastSeen < 5)
        $("#Status").Text("Online");
    else if (result.LastSeen % 10 == 0)
        $("#Status").Text(result.LastSeen + " minutes");
 },"json");

Полностью не проверено, но должно быть близко.

1 голос
/ 15 июля 2010

Ккрамер прав. Я предлагаю расширить его решение, чтобы сделать его разлагаемым.

/ Now, an action that would return the amount of time since the user was last seen
public ActionResult GetLastSeenTime()
{
if (Request.IsAjax) {    
return Json(new { TimeAway = Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes});
}
ViewData.Add("LastSeen", Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes}));
return View("MyView")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...