2012-05-03 3 views
3

에 다시 게시 후 널 (null)이된다하여 페이지로드에서 실행 내 코드입니다 : 때때로ASP.NET 세션이 여기에 지역

protected void Page_Load(object sender, EventArgs e) 
{ 
    DisableChaching(); 
    if (Request.Cookies["UserName"] == null) 
    { 
     if (Session["UserName"] == null) 
     { 
      Response.Redirect("~/Default.aspx"); 
     } 
     else if (Session["AccessLevel"].ToString().Equals("2")) 
     { 
      Response.Redirect("~/Default.aspx"); 
     } 
    } 
    else if (Session["AccessLevel"].ToString().Equals("2")) 
    { 
     Response.Redirect("~/Default.aspx"); 
    } 
    if (!IsPostBack) 
    { 
     LoadControls(); 
     BindGrid(); 
    } 
} 

나는 데이터베이스에 일부 데이터를 저장하려고 내가 오류가 발생, 나는 시도 내 저장 버튼을 클릭하여 데이터를 다시 저장하고,이 오류 얻을 : 다음 줄에

Object reference not set to an instance of an object

을 경우 코드 :

else if (Session["AccessLevel"].ToString().Equals("2")) 

왜이 오류가 발생합니까? 여기

는 CHR 사용자를 기억하는 체크 박스가 어디에 로그인 사용자 컨트롤에 내 코드입니다 :

DisableChaching(); 
    FillInfo(); 
    if (Request.Cookies["UserName"] != null) 
    { 
     Session["UserName"] = Request.Cookies["UserName"].Value; 
     Session["AccessLevel"] = Request.Cookies["AccessLevel"].Value; 
     Session["FirstName"] = Request.Cookies["FirstName"].Value; 
     Session["LastName"] = Request.Cookies["LastName"].Value; 
     WellCome(); 
     if (Session["AccessLevel"].ToString() == "1") 
     { 
      RenderMenu(AcccessLevel.SiteManager); 
     } 
     else if (Session["AccessLevel"].ToString() == "2") 
     { 
      RenderMenu(AcccessLevel.Client); 
     } 
    } 
    else if (Session["UserName"] != null) 
    { 
     WellCome(); 
     if (Session["AccessLevel"].ToString() == "1") 
     { 
      RenderMenu(AcccessLevel.SiteManager); 
     } 
     else if (Session["AccessLevel"].ToString() == "2") 
     { 
      RenderMenu(AcccessLevel.Client); 
     } 

    } 
    else 
    { 
     WellGo(); 
     RenderMenu(AcccessLevel.LogedOutUser); 
    } 
enter code here 
:
if (ChR.Checked == true) 
      { 
       Response.Cookies["UserName"].Value = txtUserName.Text.Trim(); 
       Response.Cookies["UserName"].Expires = DateTime.Now.AddMonths(2); 
       Response.Cookies["AccessLevel"].Value = member.AccessLevel.ToString(); 
       Response.Cookies["AccessLevel"].Expires = DateTime.Now.AddMonths(2); 
       Response.Cookies["FirstName"].Value = member.FirstName; 
       Response.Cookies["FirstName"].Expires = DateTime.Now.AddMonths(2); 
       Response.Cookies["LastName"].Value = member.LastName; 
       Response.Cookies["LastName"].Expires = DateTime.Now.AddMonths(2); 
       Session["UserName"] = txtUserName.Text.Trim(); 
       Session["AccessLevel"] = member.AccessLevel.ToString(); 
       Response.Redirect("~/Default.aspx"); 
      } 
      else 
      { 
       Session["UserName"] = txtUserName.Text.Trim(); 
       Session["AccessLevel"] = member.AccessLevel.ToString(); 
       Session["FirstName"] = member.FirstName; 
       Session["LastName"] = member.LastName; 
       Response.Redirect("~/Default.aspx"); 
      } 

내가 세션에 Page_Load 이벤트에서 이런 식으로 값을 할당 내 마스터 페이지에서

+0

이 게시물을 읽었습니까 http://arstechnica.com/civis/viewtopic.php?f=20&t=220827? –

+0

조는 그런 문제가 없었습니까?! 무엇이 잘못 될 수 있는지 생각해 낼 수 있습니까? 여기서 내 코드에 문제가있는 것을 보시겠습니까? 또한 여기에 세션 값을 설정하는 코드가 있습니다 : – Karamafrooz

+0

아마 app-domain이 재활용되기 때문에 세션이 손실 될 수 있습니다. http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx –

답변

4

사이의 차이를 이해 바랍니다! db에있는 책에 대한 정보를 저장하고 app 폴더에 책의 이미지 파일을 저장하려고 할 때 파일을 저장할 수있는 권한이 없으며 응용 프로그램이 오류를 발생시키고 모든 세션이 null이됩니다 !!!

+0

즉, 응용 프로그램 오류가 있으면 세션이 null이됩니다! – HydPhani

0

Why am I getting this error?

Session["AccessLevel"]이 Null이며 Null 개체에서 메서드를 호출하려고하기 때문에.

1

아래와 같이 코드를 교체하십시오.

string val = Convert.ToString(Session["AccessLevel"]); 
if (val == "2") 
{ 

} 

나는 내 세션이 null이 될 이유가 발견 생각이 ==Equals()

public static String AccessLevel { 
    get 
    { 
     return Convert.ToString(HttpContext.Current.Session["AccessLevel"]); 
    } 
    set 
    { 
     HttpContext.Current.Session["AccessLevel"] = value; 
    } 
} 
+0

세션이 다시 null이면 첫 번째 코드 줄에서 같은 오류가 발생한다! – Karamafrooz

+0

'val == "2"' ' –

+0

'Convert.ToString' 오류를 throw하지 않고 빈 문자열과 null 값이 여전히 false를 반환하므로 String.IsNullOrEmpty 호출을 생략 할 수 있습니다. 세션에서 값이 null이면 variable' 동일한 null 값이 String 변수로 리턴됩니다. 위에서 언급 한 코드를 테스트 했습니까? – Pankaj

0

다른 사용자의 경우 세션 시간 초과를 확인하십시오. 그것은 문제 일 수 있습니다. 기본 시간 초과를 변경할 수 있습니다

<system.web> 
    <authentication mode="Forms"> 
     <forms timeout="50"/> 
    </authentication> 

    <sessionState timeout="60" /> 
</system.web> 
관련 문제