2014-12-04 7 views
0

Amazon Web Services EC2를 사용하여 개발중인 IIS/ASP.NET 응용 프로그램을 테스트하려고 시도했지만 로그인이 작동하지만 ASP.NET 세션이 작동하지 않습니다 ' 페이지를 새로 고침하거나 다른 페이지로 이동할 때 계속 유지되는 것처럼 보입니다. 다음은AWS EC2의 ASP.NET 세션 지속성

protected void Page_Load(object sender, EventArgs e) 
      { 
        if(Page.IsPostBack) 
        { 
          NameValueCollection nvc = Request.Form; 

          string username = nvc["username"]; 
          string password = nvc["password"]; 
          Hydra.WebService1SoapClient client = new Hydra.WebService1SoapClient(); 

          string sid = client.LoginSession(username, password); 

          if (sid != "Incorrect details") 
            HttpContext.Current.Session["loggedin"] = true; 
          else 
            HttpContext.Current.Session["loggedin"] = false; 
        } 
      } 

세션 데이터를 표시하기 위해 내 디스플레이 페이지에서 내 로그인 폼 페이지에서

를 Page_Load 코드 (I 중 하나가 페이지를 이동하거나 LoginForm 페이지를 새로 고침 할 때까지 세션이 올바르게 설정됩니다).

 <% if (HttpContext.Current.Session["loggedin"] == null || (bool)HttpContext.Current.Session["loggedin"] == false) 
       { %> 
      <a class="menu" href="register.php">Create Account</a> 
      <% } else { %> 
      <a class="menu" href="hd.php">Dashboard</a>&nbsp;<a class="menu" href="ticketlist.php">Tickets</a> <a class="menu" href="admin/index.php">Admin</a> 
      <% } %> 

      Value: <% Response.Write("" + HttpContext.Current.Session["loggedin"] + " <br /> SID? " + HttpContext.Current.Session.SessionID); %> 

로컬 IIS 시스템에서이를 테스트했으며 정상적으로 작동합니다 (세션은 지속적입니다).

내 질문은 다음과 같습니다. AWS에서 InProc 세션 상태 저장 장치가 좋지 않거나 다른 이유로 문제가 있습니까?

+0

로드 밸런서 뒤에 여러 ec2 인스턴스를 실행하고 있습니까? 아니면 단지 하나? –

+0

@ E.J.Brennan 아니요. 단일 인스턴스가 아닌로드 균형 조정, max iis workers set 1, iis 설정에서 세션 상태가 20 분의 시간 초과로 improc이고 이러한 요청이 1 분 이내에 있음을 확인했습니다. – Ben

+0

InProc 세션 상태를 사용하는 경우 Sql 데이터베이스로 전환하여 세션을 유지하십시오. 그것의 더 안정적이고 당신은 배포 살인 세션에 대해 걱정할 필요가 없습니다. 그것도 설치하는 SQL 데이터베이스 ASP.NET 세션 상태를 매우 쉽게. –

답변

2

단일 ec2 서버를 실행하는 경우에는 고유 한 것이 없어야합니다. 저는 AWS에서 항상 그렇게하며 AWS가 아닌 서버와 똑같이 작동합니다.

마이크로 인스턴스를 실행하여 한계에 도달 할 가능성이 있으며 끊임없이 재활용되고 있으며 상태가 손실됩니다.

+0

t2 마이크로를 사용하고 있습니다 ... 응용 프로그램 풀을 사용하지 않도록 설정 했는데도 가능합니다. 나는 아침에 일어나서 너에게 돌아갈 첫 번째 기회를 시도 할 것이다 :) – Ben

+0

이것은 희망의 진주처럼 보였지만 나는 그것을 시험했고 거기에있는 것을 볼 수 없도록 400MB의 여유 RAM을 가지고있다. global.asax를 추가하고 각 이벤트에 대해 파일에 기록하고 모든 페이지로드에 대해 모든 이벤트를 실행하는 것처럼 보입니다. 그게 전혀 도움이되는지 나는 모른다. – Ben

+0

내 문제는 같은 응용 프로그램에 SOAP 호출로 할 것입니다. Hydra.WebService1SoapClient 클라이언트 = 새로운 Hydra.WebService1SoapClient();를 주석 처리하면 세션이 지속됩니다 – Ben