Как я могу просмотреть все в состоянии сеанса для всех активных сеансов? - PullRequest
4 голосов
/ 28 августа 2009

Я хотел бы создать административную страницу, чтобы показать, что наше использование состояния сеанса не выходит из-под контроля.

Можно ли получить список всех активных сеансов и, если да, как я могу получить доступ ко всем данным сеанса в каждом сеансе?

Ответы [ 2 ]

4 голосов
/ 28 августа 2009

Отказ от ответственности: я просто придумала эту реализацию, потому что я думала, что это интересная и разрешимая проблема. Таким образом, могут быть некоторые проблемы или детали, которые я не учел. Тем не менее, если вы используете InProc состояние сеанса, вот решение.

Сводка: создайте объект уровня приложения (например, список), сохраненный в состоянии приложения, созданный во время события Application_Start, и при каждом событии Session_Start добавьте ссылку на сеанс в свой список. На Session_End удалите его. Чтобы получить все активные сеансы и значения, выполните цикл по списку сеансов, а затем по ключам сеансов каждого.

Global.asax

void Application_Start(object sender, EventArgs e) 
{
    Application["activeSessions"] = new System.Collections.Generic.List<HttpSessionState>();
}

void Session_Start(object sender, EventArgs e) 
{
    var activeSessions = (System.Collections.Generic.List<HttpSessionState>)Application["activeSessions"];
    activeSessions.Add(this.Session);
}

void Session_End(object sender, EventArgs e) 
{
    var activeSessions = (System.Collections.Generic.List<HttpSessionState>)Application["activeSessions"];
    activeSessions.Remove(this.Session);
}

SomePage.aspx

    //add something to session for test
    this.Session["someStr"] = DateTime.Now.ToString();

    //get sessions
    var activeSessions = (List<HttpSessionState>)Application["activeSessions"];
    foreach (var session in activeSessions)
    {
        Response.Write("Session " + session.SessionID + "<br/>");
        foreach (string key in session.Keys)
        {
            Response.Write(key + " : " + session[key] + "<br/>");
        }
        Response.Write("<hr/>");
    }

Вывод: (после загрузки второго браузера, чтобы попасть на страницу)

Session sj0sa255uizwlu45zivyfg2m 
someStr : 8/28/2009 11:03:37 AM
----
Session 530b3sjtea22jm451p15u355 
someStr : 8/28/2009 11:03:43 AM
----
0 голосов
/ 28 августа 2009

Сессия не может быть доступна из другой сессии. Однако, внедрив поставщика членства, вы можете узнать, активен ли сеанс, и много другой полезной информации о действиях пользователя. Также, сохраняя состояние сеанса с помощью БД, вы можете получить нужную информацию.

Вы можете использовать флаг «active» для хранения / удаления сеансов в БД, просто чтобы получить более масштабируемое решение, в случае, если это важно для вас.

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