2011-03-06 3 views
1

MVC에서 세션 상태를 사용하려고하는데 전체 저녁 동안 멈추었습니다! 세션 상태를 MVC에서 아껴서 사용해야 함을 알았지 만,이 페이지에이 세션을 사용하고 싶습니다. 그래서 의견보다는 해결책을 고맙게 생각합니다.페이지로드 사이에 ASP.NET MVC 세션이 손실되었습니다.

기본적으로 나는 CAPTCHA 이미지가있는 문의 양식이 있습니다. 페이지가로드되면 CAPTCH 이미지 (동적으로 생성 된 이미지)에 사용 된 문자로 세션을 설정하려고합니다. async가 새로운 코드를 생성하고 세션을 설정하며 동적으로 새 이미지를 화면에로드하는 '새 이미지'링크가 있습니다.

페이지가로드되거나 다시로드되지 않는 한 세션은 설정 상태를 유지합니다. 세션의 코드 (사용자에게 표시되는 내용을 반영해야 함)에 대해 사용자 입력의 유효성을 검사 할 수 있어야하지만 세션이 비어 있어야합니다.

이미지에 AJAX를 다시로드하는 즉 세션을 비동기 적으로 설정하면 게시물을 수행 할 때 세션이 설정됩니다 !!

무슨 일 이니?

세션 값을 유지할 수 있어야합니다 - arrrhhhh!

public new HttpContextBase HttpContext 
{ 
    get 
    { 
     HttpContextWrapper context = new HttpContextWrapper(System.Web.HttpContext.Current); 
     return (HttpContextBase)context; 
    } 
} 

컨트롤러에

내가 가진 : 내가 가지고있는

이 기본 컨트롤러

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Contact(ContactForm c, string button) 
    { 
    string sessCaptcha = HttpContext.Session["CAPTCHA_Contact"] == null ? "" : HttpContext.Session["CAPTCHA_Contact"].ToString(); 
    } 

어떤 아이디어 ????? 예쁜 pls 상단에 체리와 함께 :)

고마워요!

답변

4

...

적으로 Response.End() (전에 세션 값을 설정하지 마십시오 그리고 나는 response.redirect에도 똑같이 적용된다고 믿는다).

OMG - 4 시간 후에 다시는 다시는 돌아 오지 않을 것입니다! 여기

내 어리 석음을 설명하기 위해 데모 코드는 ...

public ActionResult Page1() 
     { 
      Session["test1"] = "hello world"; 

      // This means the session won't be set 
      // It's is used in valid circumstances..e.g. setting session, then dynamically generating an image based on that value. 
      Response.End(); 

      return View(); 
     } 

     public ActionResult Page2() 
     { 
      ViewBag.Test = Session["test1"].ToString(); 

      return View(); 
     } 

     [HttpPost] 
     public ActionResult Page2(FormCollection fc) 
     { 
      ViewBag.Test = "...is still..." + Session["test1"].ToString(); 

      return View(); 
     } 
+0

dont는 리디렉션에 똑같은 내용이 적용된다고 생각하지 만 사용자의 응답은 .end가 세션을 종료합니다. – jonezy

+0

FileStreamResult와 같은 다른 결과를 사용하여 코드를 수정 했으므로 세션을 설정하고 메모리 스트림을 통해 생성 된 동적으로 생성 된 이미지를 반환 할 수있었습니다. –

+0

응답주기가 완료 될 수 있도록 Response.End (true)를 수행하면 작동한다고 생각합니다. –

0

당신은 TempData 개체를 사용하여 조사 할 수 있습니다

내가 그렇게 지금 당황하고 http://blog.donnfelker.com/2010/02/26/aspnet-mvc2-tempdata-now-persists/

+0

나는 모양을하지만 그것도 시도 않았고 그것은 데이터의 손실 - 나는 또한 세션을 사용하여 생각? MVC에서 설정해야하는 세션에 대한 정보가 있습니까? –

관련 문제