세션 시간 초과 후 일부 작업을 수행하는 경우 사용자에게 "세션 만료"메시지를 표시해야하는 .NET MVC 4 응용 프로그램을 개발 중입니다..Net MVC - 전용 페이지 전용 "세션 만료"표시
매우 긴 시간 초과 및 세션 시간 단축으로 세션 인증을 사용하고 있으므로 세션이 만료되었거나 새로운 방문자인지 알 수 있습니다. 즉 세션 타임 아웃에서 새 방문자를 구분 만의
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="10080" defaultUrl="~/Index" />
</authentication>
<sessionState mode="InProc" timeout="20" />
내가 말했듯이, 및 응용 프로그램 자체에 대한 필요가 없습니다 : 이것은 내의 Web.config하는 섹션이다. 동일한 결과가 다른 것으로 달성 될 수 있다면 변경 될 수 있습니다. 의 Web.config에두고
, 나는이 (가)의 Global.asax에서 다음을 수행 할 수protected void Session_Start(object sender, EventArgs e)
{
//if it's a new session AND the user is authenticated, then it's a session timeout
if (Request.IsAuthenticated)
{
if (Request.RequestContext.HttpContext.Request.IsAjaxRequest())
{
//...
//Ajax handling code
//...
//The redirect is so I can return a JsonResult with a standard object with the message
Response.Redirect("/GetJson?some_parameters, true);
}
else
{
Response.Redirect("/SessionExpired", true);
}
}
}
로그인이 필요한 웹 사이트의 개인 섹션에 대한 위대한 작품을 모두. 문제는 사용자가 로그인하고 세션 시간 제한을 기다린 다음 로그인이 필요없는 "공용"페이지를 열려고하면 "세션 만료되었습니다"라는 메시지가 계속 표시된다는 것입니다. 그게 내가 피하기를 원하는 것입니다. "세션 만료"메시지는 사용자가 로그인이 필요한 페이지에 액세스하려고하는 경우에만 표시되어야합니다.
나는 Session_Start에 플래그를 설정하려고 시도하고 Global.asax의 나중 이벤트에서 리디렉션했습니다. 그러나 나는 가변적 인 접근성 문제가 있었기 때문에 작동하지 않았다. 현재 작업에 [AllowAnonymous]
속성이 있는지 확인하려고 했으므로 리디렉션을 건너 뛸 수는 있지만 방법을 파악할 수는 없습니다. 내가 읽은 일부 대답은 내 "세션 만료"논리가 사용자 지정 특성에 있어야한다는 인상을 주었지만 이것이 올바른 접근 방법인지 여부는 알 수 없습니다.
제 질문은 .Net MVC 4의 "개인"페이지 만 "세션 만료"를 수행하는 가장 좋은 방법은 무엇입니까?
조치 필터에서이 요청으로 세션이 방금 작성된 것인지 알 수있는 방법이 있습니까? 그렇지 않은 경우 ... 사용자가 새로운 방문자이거나 만료 된 세션이있는 이전 방문자인지 어떻게 알 수 있습니까? – FercoCQ
플래그 역할을하는 사용자 정의 쿠키를 사용할 수 있습니다. 이 쿠키를 처리하기 위해 전역 작업 필터를 등록 할 수 있습니다. 사용자 지정 쿠키가 요청에없고 세션에 세션이있는 경우 쿠키를 "새 세션"으로 설정하십시오. 쿠키가 이미 요청에 존재하고 세션이 활성 상태라면 "이전 세션"으로 변경하십시오. 쿠키가 있지만 세션이 만료 된 경우이를 "이전 세션 만료"로 플래그하십시오. 이런 식으로 정확히 할 필요는 없습니다. 단지 할 수있는 일의 스케치 일뿐입니다. – JotaBe
고마워, 나는 며칠 후에 그것을 시도 할 것이고 그것이 어떻게 진행되는지 알려줄 것이다. – FercoCQ