2013-02-18 4 views
0

두 가지 동작 기능이있는 컨트롤러 클래스가 하나 있습니다. 하나의 작업은 하나의보기가있는 로그인 페이지이고 다른 하나는 여러보기가있는 백엔드 페이지입니다. 백엔드 동작은 로그인 동작을 사용자에게 전송해야하며 사용자에게 로그인 페이지에서 "세션이 만료"와 같은 메시지를 표시 할 때가져 오기, 게시 또는 쿠키를 사용하지 않고 세션간에 데이터 보관

public ActionResult Login(...) 
{ 
    if (logged in or login success) 
    { 
     return RedirectToAction("Backend","Controller"); 
    } 
    ... 
    return View(); 
} 

public ActionResult Backend(...) 
{ 
    if(session expired or not logged in) 
    { 
     return RedirectToAction("Login","Controller"); 
    } 
    ... 
    return View("someView"); 
} 

문제입니다.

예를 들어 ViewBag는 현재 세션에만 있습니다. 그러나 세션간에 정보를 저장하는 비슷하고 쉬운 방법이 있습니까? 백엔드에서 메시지를 설정 한 다음 로그인으로 리디렉션하고 해당 로그인 메시지를 읽고보기에 표시 할 수 있습니까? PersistentViewBag 같은 종류.

실제로 get, post 또는 cookies를 사용하고 싶지는 않습니다. 실행 가능한 옵션이지만 실제로는 대신 백엔드 동작에서 자체보기로 로그인해야합니다.

+0

을 당신은 내가 같은 메시지 로그인 페이지 **의 "세션이 만료"사용자에게 보여주고 싶은 ** 문제는 말하지만, 계속해서 ViewBag 지속성과 같은 관련없는 문제를 설명하십시오. 따라서이 문제가 귀하의 문제이거나 관련이 있다면 조금 혼란 스럽습니다. –

+0

@Dave A : 관련이 없습니다. ViewBag을 사용하여 현재 세션의 모든보기에 메시지를 표시 할 수 있습니다. 약간의 상상력을 사용하여 영속적 인 ViewBag를 사용하여 여러 세션의 뷰에 메시지를 표시 할 수 있습니다. 거의 서버 측 쿠키와 같습니다. – Espen

+1

오해가 있다고 생각합니다. ** 예를 들어 ViewBag는 현재 세션에만 있습니다 **. 사실이 아니다. ViewBag는 Controller의 멤버이며 범위를 공유합니다. Session을 잃고 ViewBag를 유지할 수 있습니다. 그 반대도 마찬가지입니다. 많은 문제/우려 사항이 게시되는 것처럼 느껴집니다. 로그인 페이지 **에서 "세션 만료"와 같은 메시지를 표시하려면 주로 ** 문제가 있습니까? 그렇다면 답이 있습니다. 그렇지 않다면 나는 그 질문을 완전히 이해하기 위해 고심하고있다. –

답변

2

로그인 페이지로 리디렉션 할 때 단순히 쿼리 문자열을 사용하여 데이터를 전달할 수 있습니다.

public ActionResult Backend(...) 
{ 
    if(session expired or not logged in) 
    { 
     return RedirectToAction("Login","Controller",new { IsSessionExpired = true }); 
    } 
    ... 
    return View("someView"); 
} 

로그인 동작에서 쿼리 문자열을 검사하고 메시지를 표시할지 여부를 결정할 수 있습니다.

업데이트

당신은 쿼리 문자열을 사용하지 않는 경우도 TempData를 사용할 수 있습니다.

public ActionResult Backend(...) 
{ 
    if(session expired or not logged in) 
    { 
     TempData["IsSessionExpired"] = true; 
     return RedirectToAction("Login","Controller"); 
    } 
    ... 
    return View("someView"); 
} 

그런 다음 로그인 행동을 확인할 수 있습니다

if(TempData["IsSessionExpired"] != null) 
{ 
    //Show message 
} 
+0

그러나 이것은 get 요청을 사용하고 있습니다. 그렇지 않습니까? 그게 잘못된 것은 아니지만, 누군가는 원하는대로 무엇이든 요청할 수 있습니다. 그리고 그것은 단지 메시지 일 뿐이고, 키워드를 알아야 할 필요가 있습니다. 요청을받지 않고 가능한 경우 서버 측에 보관하고 싶습니다. – Espen

+0

@Epen Ok, 내 업데이트 참조. –

+0

고맙습니다. 너무 간단했습니다. TempData에 대해 조금 읽으면서 그것이 내가 원하는 것입니다 :-) – Espen

관련 문제