Идентификатор сеанса ASP.NET - PullRequest
       16

Идентификатор сеанса ASP.NET

2 голосов
/ 14 декабря 2010

Я пытаюсь создать код сеанса для каждого клиента на моем сайте.В Session_Start глобального asax у меня есть этот код:

private static long codSesion = 0;
private static object codSesionLocker = new object();
protected void Session_Start(object sender, EventArgs e)
{
    if (Session["CodSesion"] == null)
    {
        lock (codSesionLocker)
        {
            if (Session["CodSesion"] == null)
            {
                if (codSesion == 9999)
                    codSesion = 0;
                codSesion++;
                Session["CodSesion"] = codSesion;
            }
        }

    }
}

Когда я наблюдаю за этим, это кажется идеальным.Через некоторое время бездействия начинаются проблемы.Одна из вещей, которая случается, состоит в том, что слишком много раз начинается с 1 (без достижения 9999 и без перезагрузки IIS).И в последнее время даже хуже, чем та: я использовал коды 1 и 2. Я перестаю использовать сервер (оставляя IIS без активности).После почти 1 часа (50 минут) я попробовал еще раз.Код, который IIS дал мне, был 2 (на другом компьютере, чем последний код 2).

Пожалуйста, я бы очень признателен за любую помощь с этим.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Я не уверен, объясняет ли это все поведение, которое вы перечислили выше, но по умолчанию пул приложений в IIS будет перезагружаться после определенного периода бездействия (эти параметры можно изменить в IIS для каждого пула приложений).Когда пул приложений перезапускается, новый экземпляр пула будет полностью переинициализирован.

2 голосов
/ 14 декабря 2010

После определенного периода бездействия IIS остановит вашу заявку. Как только кто-то заходит, сайт запустится снова. Добавьте к этому тот факт, что вы, вероятно, используете состояние сеанса In Processes, и именно поэтому вы видите сброс значения.

Вы можете попробовать использовать SqlServer для хранения сеанса, как описано здесь, чтобы данные сохранялись:

MSDN - Состояние сеанса ASP.NET

Даже если это работает, пытаться использовать Session таким способом - плохая идея. В зависимости от того, чего вы пытаетесь достичь, есть лучший способ справиться с ситуацией.

2 голосов
/ 14 декабря 2010

IIS перезапускает рабочий процесс, и там вы теряете статическое значение codSession.

Сохраните информацию в файл или базу данных, чтобы решить эту проблему.

...