2012-05-21 9 views
5

Porównaję zmienną sesji z ciągiem, aby sprawdzić, czy typem logowania jest administrator, czy nie.Porównanie wartości zmiennej sesji z ciągiem

kod używam:

if (Session["loggedInUsername"] == null) 
     { 
      btnLogin.Text = "Sign In"; 
      lblWelcome.Text = "Welcome!"; 
      hypManageRestaurants.Enabled = false; 
      hypManageReviews.Enabled = false; 
      hypPostReviews.Enabled = false; 

     } 
     else 
     { 
      if (Session["loggedInUserType"] == "Administrator") 
      { 
       hypManageRestaurants.Enabled = true; 
       hypManageReviews.Enabled = true; 
       hypPostReviews.Enabled = true; 
      } 
      else 
      { 
       hypManageRestaurants.Enabled = false; 
       hypManageReviews.Enabled = false; 
       hypPostReviews.Enabled = true; 
      } 
      lblWelcome.Text = "Welcome " + Session["loggedInUsername"]; 

      btnLogin.Text = "Sign Out"; 
     } 

więc najpierw ja sprawdzenie, czy każdy użytkownik zalogowany lub nie. Jeśli użytkownik zaloguje się pomyślnie, zmienna sesji "loggedInUsername" będzie miała wartość nazwy użytkownika. Jeśli zmienna sesji "loggedInUsername" nie jest pusta, sprawdzi zmienną sesji "loggedInUserType" dla typu zalogowanego użytkownika.

Oto dziwna rzecz, wartość "loggedInUserType" jest dokładnie "Administratorem" bez "", w funkcji if, w której porównuję zmienną sesji z łańcuchem "Administrator" jest pomijana i przechodzi do w innym.

Wszystkie zmienne sesyjne są coraz wartości, gdy użytkownik loguje się.

Poniżej przedstawiono dane, które używam do logowania i zapis ten jest tylko zapis, który ma typ „Administrator”.

link to image

Czy istnieje inna metoda, aby porównać zmiennej sesji na ciąg

+0

Jak masz na myśli to są pomijane? Czy przechodzi do instrukcji else? To prawdopodobnie problem z odlewaniem. Wypróbuj Object.ReferenceEquals (a, b) lub "Administrator" .Equals (Session ["..."]) –

+1

Użyj [dostawca członkostwa] (http://msdn.microsoft.com/en-us/library/ yh26yfzy.aspx). –

Odpowiedz

3

Obsada wartość typu obiekt na ciąg

((string)Session["loggedInUserType"]) == "Administrator" 
+0

Tak, odlewanie do ciąg działało, dziękuję – drinu16

1

Spróbuj tego:

if (Session["loggedInUserType"].ToString().Trim() 
     .Equals("Administrator", StringComparison.InvariantCultureIgnoreCase)) 
4

Spróbuj

if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) ...

+0

Ta metoda działa również :) ale nie wiem, czy mogę zaznaczyć 2 odpowiedzi xD – drinu16

0

Czy jesteś pewien, że wszystkie białe spacje zostały tr immed od końca sesji ["loggedInUserType"]?

0
if (Session["loggedInUserType"].ToString() == "Administrator") 
0

Session kolekcja zwraca wartości typu Object, więc jeśli porównać to do łańcucha będzie porównanie wartości odniesienia obiektu, nie porównywanie wartości ciągu.

Obsada odniesienie obiektu do string:

if (((string)Session["loggedInUserType"]) == "Administrator") 
0

Można to zrobić:

string session = (string)Session["loggedInUserType"] 

if (session == "Administrator") 

lub Twój Session może być w określonej klasie pobierające.

0
if(Convert.ToString(Session["loggedInUserType"]) == "Administrator) 

W ten sposób, nie ma potrzeby, aby sprawdzić wartość null becuase Convert.ToString obsługiwać Null Zwracana wartość „” pusty ciąg