2011-07-28 4 views
0

내 웹 페이지에서 다음 단계를ASP.NET은 가능한 masterpage에서 확인 모든 널 세션을 처리하는 것입니다

1)의 사용자 로그 및 I 설정 한 다음 세션 변수

 Session("userName") = reader_login("useremail").ToString() 
    Session("userId") = reader_login("user_ID").ToString() 
    Session("firstName") = reader_login("firstName").ToString() 

2) 이제 LoggedIn.Master라는 마스터 페이지를 참조하는 VB.NET 템플릿에 로그인했습니다. 위의 null 세션 변수를 확인하기 위해 다음 메소드를 추가했습니다. 그리고 만약 그들이 다시 로그인 페이지로 리디렉션 null입니다. 나는 위의 마스터 페이지를 참조하는 다른 .NET 템플릿이나 된 UserControls 3 개 세션 변수 위의 어떤을 사용하려는 경우

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 

    '#Check that User is Logged in, if not redirect to login page 
    If (Session("userId") Is Nothing) Or (Session("userName") Is Nothing) Or (Session("firstName") Is Nothing) Then 
     Response.Redirect(ConfigurationManager.AppSettings("site_base_url").ToString & "login/", False) 
    End If 

3) 이제 내 문제는 내가 다시 체크

 If (Session("userId") Is Nothing) Or (Session("userName") Is Nothing) Or (Session("firstName") Is Nothing) Then 
     Response.Redirect(ConfigurationManager.AppSettings("site_base_url").ToString & "login/", False) 
    End If 

을 추가해야 할 각 페이지 또는 마스터 페이지의 수표에 나타납니다. 때문에, 즉 UserControl을에 내가하려고하면 순간 즉

customerName.Text = Session("userName").ToString() 

또는

Response.Write(Session("userName").ToString()) 

나는 개체의 인스턴스로 설정되지 않았습니다 오류 개체 참조를 얻고있다. 가 null의 경우 당신은 세션 개체에 대한 요청 및 HTTP 모듈을 만들 수 있습니다

답변

1

처럼 사용하여 question - 마스터 페이지가 세션을 검사하고 모든 컨트롤과 페이지 코드가 Session에 대한 참조를 만들기 전에 리디렉션되는 한 괜찮습니다.

합리적인 것처럼 보이는 OnInit()을 사용했지만 이벤트 타이밍을 잘 이해하려면 this article을 참조하십시오.

덧붙여 말하자면, 페이지 및 제어 코드에서 Session으로 임시 전화를 사용하지 않는 것이 좋습니다. 대신, 당신을 참조하는 세션 않습니다 정적 SessionManager 클래스를 만드는 것이 좋습니다. 그렇게하면 강력한 타이핑의 이점을 누릴 수 있으며 실수로 코드의 하드 - 디버그 '세션 키'오타를 Session["FiirstName"]과 같이 만들 수 없습니다. (죄송합니다, C#으로!)

public static class SessionManager 
{ 
    private static void EnsureUserId() 
    { 
     if (Session["userId"] == null) 
     { 
      Response.Redirect("YourLogin.aspx", false); 
     } 
    } 

    public static string FirstName 
    { 
     get 
     { 
      EnsureUserId(); 
      if (Session["firstName"] == null) 
       Session["firstName"] = ""; 
      return (string)Session["firstName"]; 
     } 
     set 
     { 
      Session["firstName"] = value; 
     } 
    } 

} 
+0

안녕하세요 제임스, 답장을 보내 주셔서 감사합니다. 이것은 내가 원래 게시물의 끝 부분에 기울고 있었던 것입니다. 세션이 모두 NULL 일 때 내 모든 컨트롤과 페이지 코드에 오류가 발생합니다. 이벤트는 내 masterpage – StevieB

+0

에서 확인했습니다. 이전에 사용했던 것보다 멋지고 멋지게 보이는 코드 스 니펫에 대해 안녕하세요 james님께 감사드립니다. 나는 이것을 사용하고 masterpage의 모든 세션 상태를 제어하는 ​​것을 잊어 버리려는 것으로 생각하지 않습니다.^^ * : P – StevieB

+0

걱정하지 않아도됩니다. 방금 생각한 것 - 액세스 제어에 표준 ASP.NET 인증을 사용하지 않는 이유가 무엇입니까? http://msdn.microsoft.com/en-us/library/wce3kxhd.aspx –

1

customerName.Text = 세션 ('사용자 이름 "). ToString()는, 그것은 로그인 페이지로 개발하여 리디렉션합니다 이 HTTP 모듈은 각 페이지 요청에서 모듈이 검사를 수행 한 다음 검사하지 않고 정상적으로 사용할 수 있습니다.

당신이 항목에 액세스 할 때 null 값을 처리하고 단지 래퍼를 호출하는 세션 래퍼를 작성할 수
+0

이봐, samir이게 좋겠지 만,이 http 세션 모듈에 대해서는 전혀 모르는 예가 있을까요? – StevieB

+0

** 필요한 모듈이 필요 없다고 생각하십시오 ** global.asax ** Application_PreRequestHandlerExecute ** 이벤트 동안 세션의 상태를 확인할 수 있습니다 ** –

+0

안녕하세요 제임스 저는 전 세계적으로 사용하지 않는쪽으로 기울이고있었습니다. 이 사이트의 특정 측면에 대한 검사. 나는. 이 로그인 한 마스터 페이지를 참조하는 모든 페이지 그래서 기본적으로 마스터 페이지에서 내 세션 확인을 만들 수 없습니까? – StevieB

2

:

Public Class SessionWrapper 
    Public Shared ReadOnly Property Item() 
    'Access session here and check for nothing 
    End Property 
End Class 

을 그리고 된 답변이

SessionWrapper.Item("itemName") 
+0

죄송 합니다만, 여기에 거의 답을 얻지 못했다는 것을 알지 못했습니다. +1. –

0

이 추가 될 것이다 처리하는 더 좋은 방법을 : 또한, 오른쪽 세션 값에 대한 호출로 널 세션 검사를 통합 할 수 있습니다 이 세션 변수가 필요한 모든 컨트롤의 기본 클래스.그런 다음 세션에 대한 액세스를 감싸는 속성과 다른 유용한 기능을 추가 할 수 있으며 컨트롤이 다른 마스터 페이지에서 사용되는 경우에도 검사가 작동합니다.

관련 문제