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”.
Czy istnieje inna metoda, aby porównać zmiennej sesji na ciąg
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 ["..."]) –
Użyj [dostawca członkostwa] (http://msdn.microsoft.com/en-us/library/ yh26yfzy.aspx). –