세션이 만료되면 .Net MVC 부분 보기 로드 로그인 페이지
저는 .net MVC 4를 이용하여 웹 어플리케이션을 만들고 있습니다.
자료를 편집할 수 있는 아약스 양식이 있습니다.
사용자가 15분 동안 유휴 상태이면 사용자의 세션이 만료됩니다.이 경우 사용자가 편집 버튼을 클릭하면 부분 컨텐츠 내부에 로그인 페이지가 로드되므로 현재 세션이 만료됩니다.
링크 편집 - 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
행운을 빌어요.
이 (유사한) 질문에 대한 답을 확인해 보는 것이 좋습니다.
기본적으로 이 문제와 다른 문제로 인해 리디렉션될 수 있는 함수에 대해 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
'source' 카테고리의 다른 글
공백 문자를 모두 바꿉니다. (0) | 2023.10.17 |
---|---|
Oracle: 행 유형 데이터를 다른 테이블에 삽입합니다. (0) | 2023.10.17 |
웹 소켓을 통해 데이터베이스에서 클라이언트로 실시간 데이터 업데이트/변경 (0) | 2023.10.12 |
mysqldump 명령을 실행하려고 하는 중 오류 1064(42000) (0) | 2023.10.12 |
Python CSV 리더가 쉽게 구문 분석할 수 있도록 Excel 스프레드시트를 사용하여 트리 계층을 표현하시겠습니까? (0) | 2023.10.12 |