2010-12-14 3 views
2

Я пытаюсь сделать код сеанса для каждого клиента на моем сайте. В session_start глобальной asax У меня есть этот код:Идентификатор сеанса ASP.NET

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). И последнее, даже хуже, чем taht: я использовал коды 1 и 2. Я перестаю использовать сервер (листинг IIS без активности). После почти 1 часа (50 минут) я снова попробовал. Код, который мне предоставил IIS, был 2 (на другом ПК, чем последний код 2).

Прошу вас, я с удовольствием порекомендую вам любую помощь.

+0

У вас есть код, который фактически обращается к сеансу по запросам, которые вы сделали? – Restuta

+0

И, кстати, почему ты не в порядке? http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx – Restuta

+2

Что вы пытаетесь достичь? У сеанса уже есть идентификатор: SessionID ... –

ответ

3

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

+0

Спасибо, это было на самом деле то, что происходило. Я реализовал решение @rdkleine (сохранить codSesion в файле), и теперь он работает – Diego

2

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

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

2

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

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

MSDN - ASP.NET Session State

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