2012-02-20 14 views
6

Próbuję wyrenderować pasek narzędzi na górze ekranu użytkownika, jeśli jest on zalogowany, gdzie może uzyskać dostęp do swojego konta itp. Jeśli nie są zalogowani, wyświetli formularz umożliwiający ich zaloguj się. Nie jestem do końca pewien, jak to zrobić za pomocą C# i Razor, i kontynuuj uderzanie błędów składni i kompilacji.Sprawdzanie, czy plik cookie jest ustawiony

Moja obecna forma jest następująca: Mam jeden plik, _siteLayout.cshtml. Spowoduje to zapisanie paska narzędzi u góry ekranu. Sprawdza formularz logowania do zewnętrznej bazy danych i jeśli jest uwierzytelniony, tworzy daje klientowi plik cookie. Formularz, którego zasadniczo chcę, to:

if(user logged in) 
    render account management page 
else{ 
    render login page 
} 

Prosty, ale mam wiele problemów. Oto mój kod, usuwając większość, do tej pory:

<body> 
    @using System.Text; 
    @using System.Net.Sockets; 
    @{ 
     if(Request.Cookies["mpUsername"] == null){ 
     //if user is not logged in 
      //some authentication is ran, if passed, isValid is set to true  
       if (isValid) { 
        //login is valid, set cookie 
        HttpCookie cookie = Request.Cookies.Get("mpUsername"); 
       if(cookie == null) { 
        cookie = new HttpCookie("mpUsername"); 
        cookie.Value = username; 
        cookie.Expires = DateTime.Now.AddDays(3); 
        Response.Cookies.Add(cookie); 
       } 
       } else { 
        //login invalid, prompt for pass again 
       <text>Password incorrect, please try again</text> 
       } 
      } 
    } 
    }//end of razor, HTML begins 
    <html> 
     <body> 
     @{ //if cookie is set 
      //if(Request.Cookies["mpUsername"] == null){ 

     } 
     <h2>ACCOUNT MANAGEMENT</h2> 
     @{ 
      } else {//user not logged in, cookie not set 
     } 
     //login form 
     </body> 
    </html> 

Jaki jest najlepszy sposób robienia tego, co chcę zrobić? W moim prawdziwym kodzie, strony logowania i zarządzania kontem są oczywiście znacznie większe, więc jest to nieco bardziej mylące, dlatego też usunąłem je z powyższego kodu.

+2

Czy rozważałeś użycie FormsAuthentication? http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.aspx –

+0

Tak, ale nie sądzę, że będzie to wspierać sposób uruchamiania uwierzytelniania - weryfikuję informacje logowania użytkowników względem zdalnego serwera, a nie lokalnie przechowywanego. –

+1

Zgadzam się z Paulim - używaj wbudowanego systemu. Bardzo łatwo jest coś przeoczyć/pozostawić otwór bezpieczeństwa otwarty. – Paddy

Odpowiedz

0

Dzięki temu dowiesz się więcej o Cookies in ASP.NET using C#.

+1

, podczas gdy podany link jest dobrym zasobem, nawet jeśli strona jest przenoszona, dobrym pomysłem jest podanie odpowiedzi na stronie i podanie linku jako źródła dodatkowych informacji. – mgrenier

Powiązane problemy