2012-10-03 4 views
0

제대로 작동하려면 웹 페이지에 URL에 XML 파일이 추가되어야합니다.이 파일의 이름은 module-1.xml입니다.IHttpModule의 OnBeginRequest 메서드에서 세션 변수에 액세스

이러한 URls를 깨끗하게 유지하려면 HttpContext.Current.RewritePath을 사용하여 OnBeginRequest 이벤트 내에서 추가 작업을 수행하는 IHttpModule을 작성했습니다. 나는 사용자가 model-2.xmlmodel-1.xml에서 웹 사이트를 전환 내 코드는 다음과 같이 변경하기로 결정 때를 감지하는 세션 변수를 사용하고 싶었,

public void OnBeginRequest(Object s, EventArgs e) 
{ 
    string url = HttpContext.Current.Request.Url.AbsolutePath; 
    if (url.EndsWith(".aspx")) 
     HttpContext.Current.RewritePath(url + "?module-1.xml"); 
} 

을 지금 :

IHttpModule은 매우 간단 모양과 작동합니다 :

public void OnBeginRequest(Object s, EventArgs e) 
{ 
    string url = HttpContext.Current.Request.Url.AbsolutePath; 
    if (url.EndsWith(".aspx")) 
    { 
     if (HttpContext.Current.Session["CurrentMode"] == "1") 
     HttpContext.Current.RewritePath(url + "?module-1.xml"); 
     else if(HttpContext.Current.Session["CurrentMode"] == "2") 
     HttpContext.Current.RewritePath(url + "?module-2.xml"); 
    } 
} 

From what I have found 세션은 모듈 내부에 액세스 할 수 있지만없는 유일한 이벤트 여기서인 OnBeginRequest 이벤트 내부에서 은 기능적으로 만들 수 있습니다 (적어도 내가 수행 한 모든 테스트에서).

내 가정이 맞습니까? 그리고 만약 그렇다면, 어떤 대안을 사용할 수 있습니까? 사용자 정의 세션 변수를 만드시겠습니까? 사용자가보고있는 모듈을 알기 위해 txt 파일이나 DB에서 읽어야합니까? 모듈 내에서 사용자를 추적하려면 어떻게해야합니까?

답변

1

응용 프로그램에 필요한 보안에 따라 다릅니다. 악의적 인 사용자가 값을 변경할 수 있다는 것에 신경 쓰지 않는다면 모듈 이름을 쿠키에 저장하면됩니다. 그렇게하면 안전하게 생성 된 식별자를 쿠키에 저장하고 데이터베이스에서 조회하여 사용할 값을 얻을 수 있습니다.

+0

감사합니다. – jdecuyper

1

모듈을 완전히 제거하십시오. 당신은 단지 그것을 aspx 페이지에 첨부하고 있으므로 URL에 그 페이지가있을 필요가 없습니다.

public class Solution.Web.UI.Page : System.Web.UI.Page 
{ 
    public string CurrentMode 
    { 
     get { return String.Compare(Session["CurrentMod"].ToString(), "1") == 0) ? "module-1.xml" : "module-2.xml"; } 
    } 
} 

당신은 단순히 해당 모듈의 오버 헤드 나 쿠키에 그 정보를두기의 위험없이 페이지에 액세스 할 수 있는지 방법 : 프로젝트 페이지에서 상속하는 대신 단지 기본 페이지를 만들 수 있습니다.

+0

고마워,하지만 여전히 세션 안에있는 값에 따라 모든 aspx 파일에 XML 파일을 추가해야합니다 ... – jdecuyper

+0

호기심에서 URL에 추가하는 것은 무엇입니까? –

+0

우리는 OPC 서버에 연결하고 실시간 데이터를 표시하는 모든 페이지에 컨트롤을 가지고 있습니다. 불행히도 이러한 모든 컨트롤을 작동시키는 유일한 방법은 URL을 통해 XML 파일을 전달하는 것입니다. 고통은 있지만 주위에는 방법이 없습니다. 회사와 제 3 자 제품 계약이므로 우리는 그것을 살아야합니다 ... 지금은 – jdecuyper

관련 문제