Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Yardım Masası

SORU: Asp.net Login Mevzu
Evet sanırım aradığımı buldum ama tam işimi yarıyor değil burada kullanıcı adı ve şifre direkt sayfadan çekiliyor görüldüğü gibi ben bunun  databaseden çekmesini istiyorum bana bu konuda yardımcı olursanız sevinirim. Burada olduğu gibi olacak ama girilen değerleri databaseden sorgulayacak ve oradan çekecek birde sadece kullanıcı adı ve logini değilde databasedeki diğer verileride sayfada göstermek için ne yapmalıyım? * *


<%@ Import Namespace="System.Web.Security "%>
<html>
<head>
<script runat="server">
    Sub Login_Click(ByVal Src As Object, ByVal E As EventArgs)
        If UserName.Value = "deneme" And _
            Password.Value = "rast" Then
            FormsAuthentication.RedirectFromLoginPage(UserName.Value, persist.Checked)
        Else
            Message.Text = "Hatalı Kullanıcı adı ve parala: yeniden deneyin"
        End If
    End Sub
    </script></head>
    <body>
    <form id="Form1" runat="server">
    <table><tr><td>User Name : </td>
    <td><input id="UserName" type="text" runat="server" />
    </td></tr><tr><td>Password: </td>
    <td><input id="Password" type="password" runat="server" />
    </td></tr>
    <tr><td>Persist Authentication Cookie:</td>
    <td><asp:checkbox id="persist" runat="server" />
    </td></tr>
    <tr><td><asp:button ID="login" Text="Login" OnClick="Login_Click" runat="server" />
   </td>
   </tr>
   </table>
      <asp:Label ID="Message" ForeColor="red" runat="server" />
       </form>
        </body>
         </html>



Cevaplar

1.  Kullandığınız veritabanının SQL Server olduğunu farzederek, en son C# ile ilgilendiğinizi de hesaba katarak aşağıdaki çözümü yazıyorum. Login_Click fonksiyonunu değiştiriyoruz sadece:

private void Login_Click(object sender, EventArgs arg)
{
   // SQL injection'dan korunmak için tek tırnakları çiftleyelim
   string username = UserName.Value.replace("'", "''");
   string password = Password.Value.replace("'", "''");

   // sql'imizi hazırlayalım
   string sql = "select * from User where username='{0}' and password='{1}'";
   sql = String.Format(sql, username, password);

   // veri tabanına bağlanalım
   SQLConnection con = new SQLConnection("bağlantı bilgileriniz..");
   // sorguyu çalıştıran adapter
   SQLDataAdapter da = new SQLDataAdapter(sql, conn);
   // sorgu sonucunu içine koyacağımız DataTable
   DataTable dt = new DataTable();
   // sorgu sonucunu DataTable'ın içine koyuyoruz:
   da.Fill(dt);

   // Eğer DataTable'ın içinde 1 kayıt varsa bu kullanıcı var demektir.
   if(dt.Rows.Count==1)
      FormsAuthentication.RedirectFromLoginPage(username, persist.Checked);
   else
      Message.Text = "Hatalı Kullanıcı adı ve parala: yeniden deneyin";
}

Kolay gelsin.
fizikci
23 Kasım 2006 10:06
2.  Fizikçinin önerdiği login sağlıklı değil bence.
Hernekadar sql-injection'dan korunmak için replace felan yapmılmış olasa, parametreli sql kullanmak daha mantıklı ve tavsiye edilen yöntem...
Zeki biri çıkar tırnaksızda bozabilir sql'i...
haydar
23 Kasım 2006 10:27
3.  Konu SQL injection olmasa da login gibi bir konuda değinmeden geçmeyeyim dedim. Örneği parametreli SQL ile yazsaydım çok daha uzayacaktı ve asıl soruya cevap olmaktan uzaklaşacaktı.

SQL injection ile ilgili olarak sitemizde çok miktarda yazı var. Bkz: (ara: SQL injection)
Ayrıca haydar hocamın SQL injection konulu makalesini sabırsızlıkla bekliyoruz.
fizikci
23 Kasım 2006 10:49
4.  Makale gelecek yakında inş... şu an çevirmeye devam ediyorum...
haydar
23 Kasım 2006 11:00
5.  Ben database olarak access kullanıyorum hocam :)
BaRNeY
23 Kasım 2006 11:07
6.  Access - MSSQL bir araç, sen amaca bak barneycim...
haydar
23 Kasım 2006 11:10
7.  O zaman koddaki SQL ile başlayan sınıf isimlerini Odbc ile değiştirmen gerekiyor Barney. Bağlantı bilgisi için de bkz: connection string.
fizikci
23 Kasım 2006 11:26
8. 
    private void Login_Click(object sender, EventArgs arg)
{
   // SQL injection'dan korunmak için tek tırnakları çiftleyelim
   string username = UserName.Value.replace("'", "''");
   string password = Password.Value.replace("'", "''");

   // sql'imizi hazırlayalım
   string sql = "select * from Bayii where username='{0}' and password='{1}'";
   sql = String.Format(sql, username, password);

   // veri tabanına bağlanalım
   SQLConnection con = new SQLConnection("/app_data/bayii.mdb");
   // sorguyu çalıştıran adapter
   SQLDataAdapter da = new SQLDataAdapter(sql, conn);
   // sorgu sonucunu içine koyacağımız DataTable
   DataTable dt = new DataTable(uye);
   // sorgu sonucunu DataTable'ın içine koyuyoruz:
   da.Fill(dt);

   // Eğer DataTable'ın içinde 1 kayıt varsa bu kullanıcı var demektir.
   if(dt.Rows.Count==1)
      FormsAuthentication.RedirectFromLoginPage(username, persist.Checked);
   else
      Message.Text = "Hatalı Kullanıcı adı ve parala: yeniden deneyin";
}
    }


bu şekilde kullandım ama olmadı. üyelik.mdb dosyasından uye tablosundan username ve password sutunlarında tutuyorum verileri. :S
BaRNeY
23 Kasım 2006 12:07
9.  SQLConnection -> OdbcConnection
SQLAdapter -> OdbcAdapter

olarak değiştir.
fizikci
23 Kasım 2006 12:18
10. 
    public void Login_Click(object sender, EventArgs arg)
{
   // SQL injection'dan korunmak için tek tırnakları çiftleyelim
   string username = UserName.Value.Replace("'", "''");
   string password = Password.Value.Replace("'", "''");

   // sql'imizi hazırlayalım
   string sql = "select * from Bayii where username='{0}' and password='{1}'";
   sql = String.Format(sql, username, password);
   // veri tabanına bağlanalım
   OdbcConnection conn = new OdbcConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("app_data/bayii.mdb"));
   conn.Open();
        // sorguyu çalıştıran adapter
   OdbcDataAdapter da = new OdbcDataAdapter(sql, con);
    // sorgu sonucunu içine koyacağımız DataTable
   DataTable dt = new DataTable("");
   // sorgu sonucunu DataTable'ın içine koyuyoruz:
   da.Fill(dt);
   // Eğer DataTable'ın içinde 1 kayıt varsa bu kullanıcı var demektir.
   if(dt.Rows.Count==1)
      FormsAuthentication.RedirectFromLoginPage(username, persist.Checked);
   else
      Message.Text = "Hatalı Kullanıcı adı ve parala: yeniden deneyin";
}
    }


Olmuyor sabaha kadar iş yerinde idim sabaha kadar aradım taradım yok hiç nette bununla ilgili hiç bir şey yok. hata veriyor yaa
BaRNeY
24 Kasım 2006 09:51
11.  Barney merak ediyorum ne zaman pes edeceksin...
haydar
24 Kasım 2006 11:12
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1062 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen