source

세션이 만료되면 .Net MVC 부분 보기 로드 로그인 페이지

manysource 2023. 10. 17. 20:21

세션이 만료되면 .Net MVC 부분 보기 로드 로그인 페이지

저는 .net MVC 4를 이용하여 웹 어플리케이션을 만들고 있습니다.

자료를 편집할 수 있는 아약스 양식이 있습니다.

enter image description here

사용자가 15분 동안 유휴 상태이면 사용자의 세션이 만료됩니다.이 경우 사용자가 편집 버튼을 클릭하면 부분 컨텐츠 내부에 로그인 페이지가 로드되므로 현재 세션이 만료됩니다.

enter image description here

링크 편집 - cshtml 코드

@Ajax.ActionLink("Edit", MVC.Admin.Material.ActionNames.TagEditorPanel, MVC.Admin.Material.Name, new { isView = "false", id = Model.ID.ToString() }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "materialTagBox", InsertionMode = InsertionMode.Replace }, new { @class = "editlinks" })

컨트롤러/액션 코드

[Authorize]
public virtual ActionResult TagEditorPanel(bool isView, int id)
{
   //do something
   return PartialView(MVC.Admin.Material.Views._tag, response);
}

Web.config

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

왜 그런 일이 일어나고 있는지 이해합니다.어떻게 해결해야 할지 모르겠습니다.저는 이를 방지하고 사용자를 로그인 페이지로 직접 리디렉션하고 싶습니다.어떻게 하면 이것을 이룰 수 있을까요?

미리 감사드립니다..!!!

해킹된 답변일 수도 있지만, 재연결 위치를 자바스크립트로 로그인 페이지로 윈도우 위치를 설정하는 페이지로 변경할 수 있습니다.

웹 구성

<authentication mode="Forms">
  <forms loginUrl="~/Account/RedirectToLogin" timeout="2880" />
</authentication>

계정 컨트롤러

public ActionResult RedirectToLogin()
{
    return PartialView("_RedirectToLogin");
}

_로그인 보기로 리디렉션

<script>
    window.location = '@Url.Action("Login", "Account")';
</script>

문제는 당신의 전화가 당신의 전화를 가로챘다는 것입니다.[Authorize]그리고 액션 메소드 코드가 호출되기도 전에 로그인 페이지를 보냅니다.이를 분류하는 한 가지 방법은 사용자 지정 작업 필터를 만들어 시간 초과를 확인하고 로그인 페이지로 하드 리다이렉트하는 것입니다.다음 게시물에는 필터를 생성하고 등록하는 데 도움이 될 수 있는 좋은 기록이 있습니다.

http://www.codeblockdrive.com/2012/12/mvc-custom-filters-session-timeout.html

행운을 빌어요.

이 (유사한) 질문에 대한 답을 확인해 보는 것이 좋습니다.

ASP.NET MVC 부분 보기 아약스 게시물?

기본적으로 이 문제와 다른 문제로 인해 리디렉션될 수 있는 함수에 대해 ajax 호출을 피해야 한다고 나와 있습니다.

기능에서 수동으로 만료를 승인/확인한 다음 전체 페이지에 적용할 수 있는 리디렉션 정보를 반환하면 문제를 피할 수 있습니다.

저는 이 방법을 사용해 보았는데, 효과가 좋습니다.

kramwens의 답변에 영감을 받아 추가 RedirectToLogin 보기(및 컨트롤러 작업)를 사용하지 않고 원래 로그인 보기에 다음을 입력할 수 있습니다.

<script> 
if (window.location != '@string.Format("{0}://{1}{2}",Request.Url.Scheme, Request.Url.Authority,Url.Content("~/Account/Login"))')
            window.location = '@Url.Action("Login", "Account")';
</script>

현재 window.location을 테스트하고 예상대로 되지 않으면 예상대로 설정합니다.알아요, 제 js가 좀 까칠하고 엉망이긴 하지만 그래도 될 것 같아요 :)

부분 보기 세션이 만료된 간단한 방법을 찾습니다.

이 보기 java 스크립트 windows.load() 호출 후 URL이 로그인 페이지로 전달됩니다.

//Controller one Action Created.

<script type="text/javascript">
window.location = '@Url.Action("Login", "LogIn")';
</script>

Public ActionResult SessionExpire() { return View(); }//세션이 null이면 파트테일 보기에서 로그인하도록 리디렉션:

return Redirect("~/OrderPlace/Sessionview");

제 해결책은 가능할 때마다 c# 코드를 사용하는 것입니다.컨트롤러와 보기 이름을 가져올 수 있고, 해당 이름이 올바른지 확인할 수 있으며, 그렇지 않은 경우에는 해당 이름으로 리디렉션할 수 있습니다.

var controllerName = ViewContext.RouteData.GetRequiredString("controller");
var actionName = ViewContext.RouteData.GetRequiredString("action");

그런 다음 다음 다음을 사용하여 올바른 URL로 이동합니다.

if (controllerName != "members" && actionName != "logon")
{
    @{ Response.Redirect("~/Members/Logon");}
}

언급URL : https://stackoverflow.com/questions/22553871/net-mvc-partial-view-load-login-page-when-session-expires