none
ASP.NET WebForms - Benutzer soll nach Login eingeloggt bleiben RRS feed

  • Frage

  • Hallo zusammen,

    ich bin gerade dabei für mein WebForms-Projekt eine Benutzeranmeldung zu programmieren (bin noch ziemlicher Anfänger in ASP.NET). Das Login klappt schon, die eingegeben Daten werden mit den Daten aus meiner mySQL-Datenbank geprüft und die Anwendung gibt zurück, ob Benutzername und Passwort übereinstimmen.

    Jetzt möchte ich aber, dass der Benutzer nach dem Login in der Webanwendung angemeldet bleibt um z.B. auf sein Profil zugreifen zu können.

    So sieht bis jetzt meine LogIn-Methode aus. Diese wird ausgeführt, sobald der Button "Einloggen" geklickt wird.

    protected void LogIn(object sender, EventArgs e)
            { 
                string sql = "Select benutzername, passwort" + " From ausbilder" + " Where benutzername = @benutzername";
                MySqlCommand sqlAnweisung = new MySqlCommand(sql);
                sqlAnweisung.Parameters.AddWithValue("@benutzername", UserName.Text);
    
                MySqlConnection con = new MySqlConnection(dbcon.ConnectionString);
                sqlAnweisung.Connection = con;
                con.Open();
    
                MySqlDataReader dataReader = sqlAnweisung.ExecuteReader();
    
                if (dataReader.Read())
                {
                    if (dataReader.GetString("passwort").Equals(Password.Text))
                    {
                        UserName.Text = "Erfolgreich";                                  
                    }
                    else
                    {
                        UserName.Text = "nicht Erfolgreich";
                    }
                }
                else 
                {
                    UserName.Text = "nicht Erfolgreich";
                }
                con.Close();            
            }

    Vielen Dank für Eure Unterstützung!

    Freitag, 17. Juli 2015 08:52

Alle Antworten

  • Hy,

    für sowas eignet sich am besten Session-Variablen.
    Auf diese Variaben kann man solange die Sitzung gültig ist zugreifen und beim abmelden auch löschen.

    Aber du solltest vorher dir über einpaar Sachen im klaren sein.
    DB-Abfrage schreibt man nicht einfach so in ein Event wie bsp beim Click vom Button.
    Am besten du lagerst die DB-Abfragen in eine eigene Klasse und gibst ein DataTable oder ähnliches zurück.
    Mit der kannst dann weiter arbeiten.

    Sehr vereinfachte Klasse.

    public DataTable getDataFromDB(string query, SqlConnection con){
    DataTable dt = new DataTable();
                SqlDataAdapter sqlDT = new SqlDataAdapter(query, con);
                try
                {
                    con.Open();
                    sqlDT.Fill(dt);
                }
    ...
    return dt;
    }

    Noch besser wenn du mit SQL-Parameter arbeitest.


    Der neuer Login-Event


    protected void LogIn(object sender, EventArgs e)
            { 
                MySqlConnection con = new MySqlConnection(dbcon.ConnectionString);
                // DB-Abfrage und gleich als DataTable übergebeen
                DataTable dtUser = getDataFromDB("Select benutzername, passwort" + " From ausbilder" + " Where benutzername = '" + Username.Text + "' AND passwort= '" + Passwort.Text + "'", con);           
    
                if (dt != null && dt.Rows.Count > 0)
                {
                    Session["user"] = dt;
                }
                else { throw new Exception("Anmeldung fehlgeschlagen"); }
            }



    Somit hast das User Objekt nach erfolgreicher Anmeldung an eine Session übergeben und kannst damit weiter arbeiten (Bsp. Name anzeigen usw).

    Hoffe das ich dir damit weiter helfen konnte.


    Lg

    WaZZ





    • Bearbeitet WaZZkeSS Mittwoch, 22. Juli 2015 06:33
    Mittwoch, 22. Juli 2015 06:27
  • Zusätzlich würde ich noch mit verschlüsselten Passwörtern arbeiten. Passwörter im Klartext in einer Datenbank zu speichern ist meist nicht die gängige Praxis. Daher wäre es besser, wenn du das Passwort in einen z.B. MD5-Hash Wert umwandelst und diesem mit dem in der Datenbank abgleicht (String in MD5-Hash). Dabei speicherst du nur das verschlüsselte Passwort in der Datenbank und beim Abgleich wandelst du ebenso die Eingabe um und gleichst dann ab. Angelehnt an das Beispiel von WaZZkeSS:

    protected void LogIn(object sender, EventArgs e)
            { 
    	    // Siehe Methode "GetMD5Hash" in dem Link, den ich gepostet habe
    	    string hashPassword = GetMD5Hash(Passwort.Text);
                MySqlConnection con = new MySqlConnection(dbcon.ConnectionString);
                // DB-Abfrage und gleich als DataTable übergebeen
                DataTable dtUser = getDataFromDB("Select benutzername, passwort" + " From ausbilder" + " Where benutzername = '" + Username.Text + "' AND passwort= '" + hashPassword + "'", con);           
    
                if (dt != null && dt.Rows.Count > 0)
                {
                    Session["user"] = dt;
                }
                else { throw new Exception("Anmeldung fehlgeschlagen"); }
            }

    Um den Login zu speichern, könntest du auch Cookies benutzen. Die werden bei Anfragen immer hin und her geschickt und haben den Vorteil, dass du einfacher festlegen kannst wie lange das Cookie gültig sein soll.

    Beispiel:

    HttpCookie loginCookie = new System.Web.HttpCookie("login", dt.Rows[0]["benutzername"].ToString());

    // Cookie gültig wird auf 1 Stunde gesetzt

    loginCookie.Expires = DateTime.Now.AddHours(1);

    Response.Cookies.Set(loginCookie);


    Bei jeder Anfrage könntest du dann prüfen, ob der Cookie vorhanden ist und auch gleich abfragen, welcher Benutzername das ist.


    Mittwoch, 22. Juli 2015 07:37
  • Cookies sind generell "Nicht Vertrauenswürdige" Inhalte und daher ist es zu empfehlen (meiner Meinung nach) nur geringe u. relevante Information abzuspeichert.
    Wie Bsp: Login-Felder damit befüllen oder LastLogin anzuzeigen.
    Und die Werte im Cookie können zusätzlich verschlüsselt abgespeichert werden.

    Lg
    WaZZ
    Mittwoch, 22. Juli 2015 08:59