Подтвердить что ты не робот

Получить идентификатор сеанса в ASP.Net

как я могу получить идентификаторы всех текущих сеансов?

4b9b3361

Ответ 1

Чтобы получить идентификатор сеанса, сделайте следующее:

// In a user control or page
string sessionId = this.Session.SessionID; 

// In a normal class, running in a asp.net app.
string sessionId = System.Web.HttpContext.Current.Session.SessionID; 

Вам не нужно:

  • Сделайте любую таблицу данных или петлю что-нибудь
  • Использовать SQL-сервер для состояния сеанса
  • Обработать Session_Start или Session_End

В сценарии cookieless идентификатор сеанса создается при первом доступе к объекту Session. Это не имеет большого значения, потому что, как только вы получаете доступ к свойству SessionID, к объекту сеанса обращаются.

Для получения дополнительной информации ознакомьтесь с этим:

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx

Примечание. Примеры msdn были написаны обезьянами.

Ответ 2

Вы можете использовать файл Global.asax и установить сеанс в Session_Start. См. Ниже

в файле Global.asax вы можете сделать что-то вроде этого:

protected void Session_Start(object sender, EventArgs e)
{
    Session["sid"] = Session.SessionID;
    Session["sid"] = "Test";
} 

Затем в вашем WebForm вы можете получить идентификатор сеанса и значение, как показано ниже

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Session ID is:" + Session.SessionID.ToString()+ "<br/>");
    Response.Write("Session value is:" + Session["sid"].ToString());
} 

Подробнее см. http://www.dotnetcurry.com/ShowArticle.aspx?ID=126

Ответ 3

В соответствии с Dino Esposito каждый сеанс хранится в кэш приложения и с некоторой работой вы можете получить эту информацию:

DataTable dt = new DataTable();
dt.Columns.Add("SessionID", typeof(string));
foreach(DictionaryEntry elem in Cache) {
    string s = elem.Key.ToString();
    if (s.StartsWith("System.Web.SessionState.SessionStateItem")) {
        DataRow row = dt.NewRow();
        char[] parms = {':'};
        string[] a = s.Split(parms);
        row["SessionID"] = a[1];
        dt.Rows.Add(row);
    }
}

Ответ 4

Ответ частично зависит от того, где вы храните состояние сеанса. Предполагая, что вы используете по умолчанию (inproc), вы можете поддерживать список текущих идентификаторов сеанса с помощью событий Session_Start и Session_End в global.asax.

Ответ 5

Если вы сохраняете состояние сеанса в SQL Server, вы также можете легко получить его оттуда.

Ответ 6

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

Захватите в Application_SessionStart файл global.asax.cs:

static List<string> sessions = new List<string>();
static object sessionLock = new object();

void Application_SessionStart()
{
    lock (sessionLock) {
        sessions.Add(Session.SessionID);
    }
}

void Application_SessionEnd()
{
    lock (sessionLock) {
        sessions.Remove(Session.SessionID);
    }
}

В качестве альтернативы вы можете использовать словарь, сохраняя идентификатор сеанса в качестве ключа и дополнительные данные об этом пользователе в качестве значения. Затем вы можете легко создать страницу, отображающую все текущие пользовательские сеансы, например, для сайта администратора, чтобы показывать текущие сеансы пользователя.

SessionEnd будет вызываться только в том случае, если ваши сеансы являются InProc.