2010-01-18 4 views
7

나는 (C#으로 개발 된 ASP.NET에서 개발 된) 웹 사이트에서 일하고있다. 나는이 사이트를 통해 일하고 있어요, 나는 사이트의 많은 부분이 코드의이 유형이주의 사항 :이 모든 일반적으로 (를 Page_Load 메서드에서) 사이트의 코드 숨김에서 이루어집니다컨트롤을 웹 보안의 형태로 숨김, 더 나은 방법?

EmailLabel.Visible = false; 
WhateverButton.Visible = false; 
AnotherControl.Visible = false; 
... 

. 본질적으로 이것은 로그온하지 않은 사용자가 구성 요소에 액세스하지 못하도록하기위한 것입니다 (사이트에 대한 규칙은 로그인하지 않은 사용자가 로그인 할 때까지 사이트의 어떤 부분도 볼 수 없도록해야한다는 것입니다). 위의 방법이 일 경우 ...하지만 사용자가 로그인되어 있는지 항상 확인하고 모든 구성 요소의 올바른 상태로 전환해야하는 것은 비용이 많이 드는 것처럼 보입니다.

이 문제에 접근 할 수있는 다른 방법이 있습니까? 그것/연구에 대해 생각할 때부터 사용자가 로그인하지 않으면 홈 페이지로 리다이렉션을 할 수있는 방법이있을 것이라고 생각했습니다. 심지어, 어떤 것을 위해 기본 페이지를 확장 할 수도 있습니다. 기본 페이지를 확장하는 페이지. 그러나이 분야에 대한 지식은 제한적이므로 제 제안은 효과가 없을 수 있습니다.

무엇을 제안 할 수 있습니까? 더 나은 점이 있나요? 거기에 무엇이 충분합니까?

답변

2

우리는 제 작업에서이 작업을 많이합니다.

우리가 수행하는 방법은 System.Web.UI.Page에서 상속받은 BasePage 클래스를 만드는 것입니다. 그런 다음 OnInit를 재정 의하여 base.OnInit을 호출하고 로그인 한 사용자를 확인하는 코드를 추가합니다. 사용자가 로그인하지 않은 경우 BasePage에서 상속받지 않는 로그인 페이지로 리디렉션하십시오.

그런 다음 보호해야하는 모든 페이지에서 페이지를 BasePage에서 상속하도록 변경하십시오.

위의 설명과는 달리 Response.End(); 리다이렉트 이후 페이지의 나머지 부분을 계속 처리하는 것이 훨씬 빠릅니다!

희망이 있습니다.

+0

이 접근법은 대부분의 상황에서 권장되는 반면 더 빠를 수는 없습니다. 일부 부울 변수를 설정하면 브라우저에 301 왕복을 발행하는 오버 헤드에 가깝게 할 수 있습니까? 수백 밀리 초의 프로세서 대기 시간과 네트워크 대기 시간의 나노초와 서버가 여러 브라우저 요청을 처리하고 있습니다. 그리고 Response.End()는 ThreadAbortException을 던져서 자신의 오버 헤드를 발생시킵니다. – womp

+0

다만 명확하게하기 위하여 - * 단 * 인증 된 접근을 요구하는 페이지를 보호하는 것은 확실히 이런 방식으로 이루어져야합니다. 나는 OP가 이것을 필요로하든 그렇지 않든간에 분명하지 않다. – womp

+1

이 방법이 더 빠르다는 이유는 OnInit을 호출 한 후 Page-Cycle 메서드를 호출하지 않기 때문입니다. CPU 시간을 많이 절약 할 수 있습니다. 또한 모든 의도와 목적을 위해 사용자가 로그인하지 않은 경우 추가 라운드 트립 및 이와 관련된 시간이 예상됩니다. – TJMonk15

1

익명보기, 인증 된보기 및 특정 역할보기가있는 패널 인 loginview 구성 요소가 있습니다. 이렇게하면 쉽게 처리 할 수 ​​있습니다.

http://www.creativeui.com/2007/10/05/net-membership-part-ii-loginview/

+0

나는 사실 내가 나중에 물었던 질문에서 이것을 배웠다.이것을 지적 해 주셔서 감사합니다! – JasCav

1

그것은 컨트롤의 숫자에 보이는 플래그를 설정하는 것보다 리디렉션을 발행 할 더 비싼 크기의 많은, 많은 주문이 될 것입니다.

페이지에서 익명 액세스와 로그인 액세스를 모두 허용하는 경우 리디렉션을 사용하면 페이지의 두 번째 버전을 구축하여 익명 액세스를 허용해야합니다.

비용 문제는 실제로는 별개이지만, 전혀 문제가되지 않을 수도 있습니다. 귀하의 주요 질문에 대답하기 위해, 귀하의 애플 리케이션의 아키텍처에 대해 더 많이 알지 못해도, 나는이 두 가지를 바람직하지 않은 것으로 간주 할 것입니다. 컨트롤을 Visible = false로 설정하는 것의 이점은 보이지 않는 컨트롤에 대한 출력 스트림에 렌더링되는 것은 없지만 여전히 서버 요청과 상호 작용할 수 있다는 것입니다.

페이지 요구 사항에 대해 알지 못하면 대안을 제안하기가 어렵습니다. 다른 사람이 언급했듯이 보이지 않는 컨트롤이 익명 사용자에게 전혀 참여하지 않으면 LoginView가 사용자의 요구를 충족시킬 수 있습니다.

+0

좋은 답변 (+1)이지만 리디렉션이 "많은 주문을 더 비쌉니다"라는 이유가 궁금합니다. 특히 로그인하지 않은 사용자가 임의의 페이지에 주소를 암기하지 않는 한 홈 페이지를 "벗어날"수있는 가능성은 거의 없습니다. 그래서, 이것은 자주 일어나야 만하는 것이 아닙니다. – JasCav

+0

리디렉션을 생성하는 데 브라우저 왕복, 모든 네트워크 대기 시간, 새로운 요청을 처리 할 서버 리소스 및 완료 될 페이지 수명주기가 필요한 반면 일부 보이는 플래그를 설정하는 데 프로세서 사이클이 걸리는 것을 고려하십시오. – womp