посчитать количество сессий в ASP.net/c# - PullRequest
5 голосов
/ 07 июля 2011

Мне нужно посчитать количество сеансов, но оно не работает, когда я говорю, что если число сеансов равно 2, тогда что-то делаюПример ниже - мой код:

  // count curent session in order to keep two player
  if (HttpContext.Current.Session.Count == 2)
  {
     Response.Redirect("update.aspx");
  }

Я помещаю приведенный выше код в код позади.Есть ли другой способ, который я могу сказать: если количество сессий равно 2, то еще что-нибудь ...

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

Это количество переменных сеанса, сохраненных в сеансе для этого пользователя ( ссылка MSDN ) ... не количество сеансов пользователя, которые существуют в настоящее время.

Вам нужно будет хранить количество сеансов вне самого сеанса ... возможно, в кэше кеша или приложения.

Вот несколько SO вопросов, которые помогут реализовать это:

0 голосов
/ 17 октября 2018

Я нашел Session_Start Session_End несколько ненадежным, Session_End иногда, кажется, не вызывается.Это то, что я использую, он поддерживает словарь IP-адреса клиента и даты последнего доступа, время ожидания «сеансов» истекает через 20 минут.Здесь я храню счетчик в статическом свойстве NumberOfSessions в пользовательском базовом классе, производном от Controller.

    public void Application_BeginRequest()
    {
        Application.Lock();
        string addr = Request.UserHostAddress;
        Dictionary<string, DateTime> sessions = Application["Sessions"] as Dictionary<string, DateTime>;
        sessions[addr] = DateTime.Now;
        List<string> remove = new List<string>();
        foreach(KeyValuePair<string, DateTime> kvp in sessions)
        {
            TimeSpan span = DateTime.Now - kvp.Value;
            if (span.TotalMinutes > 20)
                remove.Add(kvp.Key);
        }
        foreach (string removeKey in remove)
            sessions.Remove(removeKey);
        BaseController.NumberOfUsers = sessions.Count;
        Application.UnLock();
    }
0 голосов
/ 25 февраля 2015

ПРИМЕЧАНИЕ: этот пример только для начинающего программиста (НЕ для опытных программистов ASP)

1) Перейдите в файл Global.asax.cs и определите функцию запуска приложения, а затем добавьте переменную счетчика Session.Вот так ...

    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup                                       
        Application.Add("NOF_USER_SESSION", 0);

2) Затем в том же файле GLobal.asax.cs продолжайте добавлять / уменьшать количество пользователей в функциях Session-Startup и Session-Endup соответственно ... вот так ...

     void Session_Start(object sender, EventArgs e)
        {
            // Code that runs when a new session is started
            Application["NOF_USER_SESSION"] =          (int)Application["NOF_USER_SESSION"] + 1;
..
..
        void Session_End(object sender, EventArgs e)
        {
            // Code that runs when a session ends. 
            // Note: The Session_End event is raised only when the sessionstate mode
            // is set to InProc in the Web.config file. If session mode is set to StateServer 
            // or SQLServer, the event is not raised.
            Application["NOF_USER_SESSION"] = (int)Application["NOF_USER_SESSION"] - 1;
..
..

3) Затем используйте эту переменную уровня приложения (int)Application["NOF_USER_SESSION"] везде, где вы можете внутри вашей программы.

0 голосов
/ 07 июля 2011

Вы можете использовать WMI для запроса количества активных сеансов в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...