2010-12-14 1 views
2

내 사이트의 각 클라이언트에 대한 세션 코드를 만들려고합니다. 전역 asax의 Session_Start에서이 코드를 가지고 :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와 다른 PC에서).

제발 내가 정말 이걸로 apreciate 줄께.

+0

작성한 요청에 따라 실제로 세션에 액세스하는 코드가 있습니까? – Restuta

+0

그리고 BTW, 왜 안 괜찮아? http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx – Restuta

+2

달성하려는 것은 무엇입니까? 세션에는 이미 ID가 있습니다. SessionID ... –

답변

3

위에 나열된 모든 동작에 대해 설명하고 있지만 기본적으로 IIS의 응용 프로그램 풀이 일정 기간 사용하지 않으면 재활용됩니다 (이러한 설정은 각 응용 프로그램 풀에 대해 IIS에서 변경할 수 있음). 응용 프로그램 풀이 재생되면 풀의 새 인스턴스가 완전히 다시 초기화됩니다.

+0

감사합니다. 실제로 그 일이 발생했습니다. @rdkleine 솔루션 (파일에 codSesion 저장)을 구현했으며 이제 작동합니다. – Diego

2

IIS는 작업자 프로세스를 재활용하므로 거기에 codSession의 정적 값이 손실됩니다.

이 문제를 해결하기 위해 정보를 파일이나 데이터베이스에 저장하십시오.

2

일정 시간 동안 사용하지 않으면 IIS에서 응용 프로그램을 중지합니다. 누군가 방문하면 사이트가 다시 시작됩니다. 이것을 In Processes Session State를 사용하고 있다는 사실과 결합하면 값이 재설정 된 것을 볼 수 있습니다. 데이터가 지속되도록 여기에 설명 된대로

당신은 세션을 저장하는 SQLSERVER를 사용을 시도 할 수 있습니다 : 그 작동하더라도

MSDN - ASP.NET Session State

,이 방식으로 세션을 사용하려고 시도하는 것은 좋은 생각이다. 달성하려는 목표에 따라 상황을 처리하는 더 좋은 방법이 있습니다.