2011-01-05 6 views
2

사용자 개체를 세션에 저장하고 컨트롤러에서 꺼내어 일부 데이터를 기록하는 경우가 있습니다. 그러나 사용자가 동시에 게시 할 때 세션은 어떤 이유로 든 혼합됩니다.사용자간에 MVC.net 세션이 섞여 있습니다.

누구나 가능합니까?

전형적인 게시물 :

[HttpPost] 
    public ActionResult Index(QuestionModel model, FormCollection collection) 
    { 
     var person = ((Person)Session["Person"]); 
     if (!ModelState.IsValid) 
     { 
      ModelState.Clear(); 
      ModelState.AddModelError("", Global.Global.error); 
      return View(new QuestionModel(person.page, (CultureInfo)Session["culture"])); 
     } 
     person.page = model.Page; 
     while (person.Answers.Count > model.Page - 1) 
     { 
      person.Answers.RemoveAt(person.Answers.Count - 1); 
     } 
     var answer = new Answer() { answer = model.ChosenAnswer, Question = "Q" + person.page }; 
     person.Answers.Add(answer); 
     if (!CheckForNextPage(person.page)) { person.hasFinishedQuestions = true; return RedirectToRoute("Result"); } 
     person.page++; 
     return View(new QuestionModel(person.page, (CultureInfo)Session["culture"])); 
    } 

나는 모든 페이지에 세션 ID를 에코, 사용자의 몇 웹 사이트를 사용할 때 그들은 서로 다른 세션 + 세션 id ...

@update를 얻을 : 숙련 된 개발자 3 명은 2 일 동안 문제를 찾고 있지만 해결책은 없습니다. 이미 코드에서 약 95 %를 제거했지만 여전히 같은 문제입니다. 서버가 다른 세션의 응답을 다시 게시합니다.

+0

코드를 게시 할 수 있습니까? –

+1

[Application_AcquireRequestState 세션이 사용자간에 공유 됨] 가능한 중복 (http://stackoverflow.com/questions/4604666/application-acquirerequeststate-session-is-shared-between-users) - 새 것을 만드는 대신 원본을 편집하십시오. – jfar

+0

여기서 Application_AcquireRequestState를 사용하지 않았습니다. 그 함수에서 코드를 제거했지만, 여전히 @jfar와 모두 관련이 있는지를 알아야합니다 : 매우 건설적이고, 동일한 결과로 두 가지 다른 문제가 있습니다. – Nealv

답변

2

"해결했습니다". 우리는 실제로 그것을 풀지는 못했지만, 모든 소스를 새로운 프로젝트에 복사하고, 다시 컴파일하고, 모든 것이 작동했습니다. 오늘까지 우리는 여전히 왜, 그리고 어떻게 그 오류가 발생했는지 모릅니다 ...

+0

이것이 잘 작동한다는 것을 알아두면 좋겠지 만, 물론 다소 개성이없는 수정이긴하지만 ;-) – Oliver

2

이것은 불가능합니다. 이것이 내 추측입니다. 이 오류를 잘못 테스트하고 있으며, 동일한 브라우저에서 다른 탭을 사용하고 있습니다. 어떤 사람들은 이것이 다른 세션을 생성하지 않는다는 것을 모릅니다.

세션을 공유하지 않는 브라우저 (즉, 파이어 폭스와 크롬)는 세션 ID가 일반적으로 쿠키에 저장되므로 2 가지 브라우저에서 테스트 해보십시오.

이 경우 다시 신고하십시오.

+0

우리는 동시에 3 대의 다른 컴퓨터에서 2 개의 브라우저로 테스트하고 있습니다. 우리는 0 정적, 내가 생각할 수있는 유일한 남아있는 것은 내 모델에 세션에 연결된 변수를 게시하는 것입니다 (이게 문제는 아닐 것입니다). View (새 QuestionModel (person.page, (CultureInfo) 세션 [ "문화"]))); – Nealv

+0

위의 함수에서 더 이상한 것은 데이터를 게시하고 헤더를 보면 ASP.NET_SessionId = s5ckrnnzezuijcivhfnqxg45가 다시 게시됩니다.; 내 응답 세션 ID를 표시 할 때 누군가 elses .....가 표시되고 다시 게시를 누르면 내 세션이 복원됩니다. 모든 것이 정상이지만, 응답은 누군가가됩니다. – Nealv

+0

또한 "개인 브라우징"또는 "익명 브라우징"모드 (이름은 브라우저에 따라 다름)로 전환하는 것이 가치가 있습니다. 이는 영구 세션 ID 주변에 쿠키가 걸려있을 수 있습니다. –

관련 문제