2017-03-15 1 views
0

다른 변수 (문자열)에서 값을 제공하려고하는 세션 변수가 있습니다. 그러나 아래에 표시된 것처럼이 작업을 수행하면 값을 저장하지 않습니다.세션 변수가 값을 저장하지 않음

DataTable table = new DataTable(); 

MySqlCommand select = new MySqlCommand("SELECT personID, address_addressID from person WHERE email='" + emailAddress + "' and password = '" + passwordR + "'", connect); //brings back the person ID if user details are correct   
using (MySqlDataAdapter adapter = new MySqlDataAdapter(select)) 
{ 
    adapter.Fill(table); 

     if (table.Rows.Count != 0) 
     { 

      string sessionVar = table.Rows[0]["personID"].ToString(); 
      Session["personID"] = sessionVar; 

sessionVar 변수는 정확한 데이터이지만 세션에 입력이 잘못 행해졌되지?

편집 :이 MVCE를 만들기 위해 더 많은 컨텍스트가 포함되었습니다. 문제의

+0

시도해보십시오. this.Session [ "personID"] = sessionVar;'. –

+0

디버거를 사용하여'sessionVar' 변수를 확인 했습니까? 또한, 당신은'Response.Redirect ("...", true);'를 사용하고 있습니까? – Nathangrad

+0

Response.Redirect가 나중에 yes라는 ​​함수에서 사용됩니다. 세션에 영향을 줍니까? 그리고 디버거를 사용하고 'personID'값을 유지합니다. – Richard1996

답변

1

요약 :
Session 데이터를 할당 한 후 Response.Redirect(URL, true);를 사용하여, 당신이 저장되지 않습니다 것을 찾을 수 있습니다. 방법에 return;이 있고 Response.Redirect(URL, false);을 사용해야합니다.

설명 : 좋은 설명은 here을 찾을 수 있습니다
. 다음은 주요 부분의 예입니다.

새 세션을 만들면 (즉, Session 변수에 처음 쓰는 경우) ASP.NET은 세션 토큰이 들어있는 클라이언트에 변동 쿠키를 설정합니다. 모든 후속 요청에서 서버 세션과 클라이언트 쿠키가 만료되지 않은 한 ASP.NET은이 쿠키를보고 올바른 세션을 찾을 수 있습니다. 이제 Redirect는 클라이언트에게 특별한 헤더를 보내어 서버가 기다리고 있던 페이지와 다른 페이지를 요청하도록합니다. 서버 쪽,이 헤더를 보낸 후 Redirect는 응답을 종료합니다. 이것은 매우 폭력적인 일입니다. Response.End는 실제로 ThreadAbortException을 사용하는 모든 페이지의 실행을 중지합니다. 실제로 여기서 일어나는 일은 세션 토큰이 전투에서 사라지는 것입니다.

+0

테스트를 마친 후에도 여전히 값을 저장하지 못하는 것 같습니다. 다른 문제가 있습니까? – Richard1996

+0

당신은'Response.Write (URL, false); '를 사용 했습니까? 세션이 시간 초과되었을 수 있습니까? web.config 파일에서 시간 초과가 설정되었는지 확인하십시오. 브라우저 쿠키 설정에서 ASP.NET 세션 ID가 변경되는지 확인할 수 있습니다. – Nathangrad

+0

내 제한 시간이 20 분으로 설정되고 세션에 모두 필요한 값 ('sessionVar'변수)이 할당되지 않는다는 점을 제외하고는 모두 올바르게 작동합니다. – Richard1996

관련 문제