Gönderen Konu: Parola Koruma ( Password Protection )  (Okunma sayısı 5676 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ebuzerr

  • okur
  • *
  • İleti: 72
Parola Koruma ( Password Protection )
« : 22 Temmuz 2006, 23:13:58 »

Parola Koruması:

Sayfalarınıza giriş için şifre koyabilirsiniz. Nasıl mı? Çok basit. Sadece yapmanız gereken veritabanı doğrulamasını yapmak. İsterseniz hemen harekete ve uygulamaya geçelim.

İlk yapacağımız şey bir veritabanı oluşturmak. Bu veritabanında Adi, Soyadi, Mail, Kullanici_Adi ve Sifre isimli sütunlar olmalıdır.

Ayrıca almak istediğiniz başka bilgiler varsa DB'inizi daha da özelleştirebilirsiniz...

Database'inizi oluşturduğunuzu varsayarak önce kayıt sayfamızı oluşturmaya başlıyalım. Çok zor değil. tek yapmamız gereken. Bir Form oluşturmak.

Ama unutmayın, InputBox'lara isim vereceğiz ki, Request metodumuzla değer alırken bu Inputbox'ların Value'lerine bakıyoruz...

İlerki sayfada Form Sayfamızın kodları mevcuttur. Daha sonra da Kayıt Formunu İşleyecek olan ASP dosyasını yazacağız...

<HTML>
<FORM METHOD="post" ACTION="KayitIsle.asp" NAME="Kayit">
<TABLE WIDTH="39%" BORDER="0" HEIGHT="250">
<TR>
<TD>Adınız :</TD>
<TD>
<INPUT TYPE="text" NAME="Adi">
</TD>
</TR>
<TR>
<TD>Soyadınız :</TD>
<TD>
<INPUT TYPE="text" NAME="Soyadi">
</TD>
</TR>
<TR>
<TD>Mailiniz :</TD>
<TD>
<INPUT TYPE="text" NAME="Mail">
</TD>
</TR>
<TR>
<TD>Kullanıcı Adınız :</TD>
<TD>
<INPUT TYPE="text" NAME="Kullanici_Adi">
</TD>
</TR>
<TR>
<TD>Şifreniz :</TD>
<TD>
<INPUT TYPE="PASSWORD" NAME="Sifre1">
</TD>
</TR>
<TR>
<TD>Şifre Tekrar :</TD>
<TD>
<INPUT TYPE="PASSWORD" NAME="Sifre2">
</TD>
</TR>
<TR>
<TD>
<INPUT TYPE="submit" NAME="cmdGonder" VALUE="Kayıt Ol">
<INPUT TYPE="RESET" NAME="cmdTemizle" VALUE="Temizle">
</TD>
</TR>
</TABLE>
</FORM>
</HTML>

Evet Kayıt Formu Sayfamız bu kadar. Şimdi de bu Formdan gelen verileri, veritabanına işleyeceğimiz ve kontrol edeceğimiz sayfamızın kodlarını yazalım. Hadi bakalım. Harika olacak...

<%@ Language=VBScript Codepage="1254"%>

<%
Adi=Request.Form("Adi")
Soyadi=Request.Form("Soyadi")
Mail=Request.Form("Mail")
Kullanici_Adi=Request.Form("Kullanici_Adi")
Sifre1=Request.Form("Sifre1")
Sifre2=Request.Form("Sifre2")
If Sifre1=Sifre2 Then
'Bu satırla Şifre hanelerine girilen şifrelerin birbirine eşit olup
'olmadığını kontrol ediyoruz...
 
Set Baglantimiz = Server.CreateObject("ADODB.Connection")
Veri = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};"
Veri = Veri & " DBQ= " & Server.MapPath("db/Parola.mdb")

Baglantimiz.Open Veri
Veri_Kontrol="SELECT *FROM tblKoruma WHERE Kullanici_Adi='"&Kullanici_Adi&"'"
Set Kontrol=Baglantimiz.Execute (Veri_Kontrol)
'Bu arama tekniğiyle de kullanıcı adının daha önceden olup
'olmadığını kontrol ediyoruz...

If Kontrol.EOF Then
'Kontrolü Kayıtların sonun kadar yapmasını istiyoruz. Then (Yani
'sonra) INSERT INTO SQL komutuyla Database'imize kayıtları ekliyoruz.

SQL="INSERT INTO tblKoruma (Adi,Soyadi,Mail,Kullanici_Adi,Sifre) values
('"&Adi&"','"&Soyadi&"','"&Mail&"','"&Kullanici_Adi&"','"&Sifre1&"')"
Baglantimiz.Execute (SQL)
%>

<%Response.Write "Kayıt Olduğunuz İçin Teşekkür Ederiz."%>

<%Baglantimiz.Close
Set Baglantimiz=Nothing
Else%>
'İlk IF'imiz için değilse yazılacak mesajı belirtiyoruz.

<%Response.Write "Seçtiğiniz Kullanıcı Adı Mevcut. Lütfen Farklı bir Kullanıcı Adı Seçin..."%>
<%
End If
Else%>

'İkinci IF'imiz için değilse yazdırılacak Satırı belirtiyoruz..
<%Response.Write "Girdiğiniz Şifreler Birbirini Tutmuyor. Lütfen Kontrol Ediniz..."%>

<%End If%>

Bu kodumuzu da ilk sayfada verdiğimiz Action Name'ine göre isimlendiriyoruz. Ben KayitIsle.asp adını vermiştim. Gördüğünüz gibi işte bu kadar. Şimdi Browser'da Form Sayfasını çalıştırın.

Ve Bir kere kayıt olduktan sonra, aynı kullanıcı adıyla kayı olmayı deneyin. Sizi uyaracaktır.
Eğer kullandığınız şifreler de birbirisinin aynısı değilse, girdiğiniz kayıt şifreleri birbirinin aynı değil diyerek sizi uyaracaktır...

Şimdi bunları hallettiğimize göre Kullanıcı girişini yapacağımız kodları yazabiliriz. Bunun için de yine bir form sayfasına ihtiyacımız olacak...

Bu form sayfamızda bir kullanıcı adı ve bir de şifre InputBox'ı olsa yeterli olacaktır...
Hadi hemen Form sayfamızı yazmaya başlayalım...

<%@ Language=VBScript%>
<% If Request.QueryString("Yanlis")="Sifre1" Then%>
Geçersiz Şifre

<% ElseIf Request.QueryString("Yanlis")="Kullanici_Adi" Then%>

Yanlış Kullanıcı Adı Girdiniz...
<%End If%>
'Bu kodlarımızla, bu formu işleyecek olan sayfadan yanlış şifre veya
'yanlış kullanıcı adı girildiği zaman, yazdırılacak hataları 'ayarlıyoruz...

<FORM METHOD="post" ACTION="UyeGirisIslem.asp" NAME="Uye_Giris">
<TABLE WIDTH="39%" BORDER="0" HEIGHT="44">
<TR>
<TD HEIGHT="6">Kullanıcı Adınız :</TD>
<TD HEIGHT="6">
<INPUT TYPE="text" NAME="Kullanici_Adi">
</TD>
</TR>
<TR>
<TD HEIGHT="2">Şifreniz :</TD>
<TD HEIGHT="2">
<INPUT TYPE="PASSWORD" NAME="Sifre1">
</TD>
</TR>
<TR>
<TD>
<INPUT TYPE="SUBMIT" NAME="cmdGonder" VALUE="Giriş Yap">
<INPUT TYPE="RESET" NAME="cmdTemizle" VALUE="Vazgeç">
</TD>
</TR>
</TABLE>
</FORM>

Kodlarımız bu kadar. UyeGiris.asp olarak kaydedelim ve bu formu işleyecek olan UyeGirisIslem.asp adlı sayfamızı yazalım.

Bu sayfada şimdiye kadar öğrendiğimiz bir sürü nesne, komut kullanacağız ve bir sürü yeni şey öğreneceğiz...
Hadi bakalım. Hemen kolları sıvayalım. Ve işlere girişelim...

<%@ Language=VBScript Codepage="1254"%>
<%
Dim Kullanici_Adi, Isim, GirilenSifre, Veri
Dim Kullanici_Adi_Kontrol, Baglantimiz,
'Değişkenlerimizi Yaratıyoruz...

Kullanici_Adi=Request.Form("Kullanici_Adi")
GirilenSifre=Request.Form("Sifre1")
'Request Metoduyla, Formda girilen Kullanici_Adi ve Sifre1 adlı
'değerleri alıyoruz.

Set Baglantimiz = Server.CreateObject("ADODB.Connection")
Veri = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};"
Veri = Veri & " DBQ= " & Server.MapPath("db/Parola.mdb")

Baglantimiz.Open Veri
'Bağlantımızı yapıyor ve DB'e bağlanıyoruz...

Kullanici_Adi_Kontrol="SELECT *FROM tblKoruma WHERE Kullanici_Adi='"&Kullanici_Adi&"'"
Set Kullanici_Adi_Kontrol=Baglantimiz.Execute (Kullanici_Adi_Kontrol)
'DB'imize SQL komutuyla bağlanarak kullanici adını kontrol ediyoruz.
'Girilen Kullanici_Adi'yla DB'imizdeki Kullanici_Adi alanında arama
'yapıyoruz. Olup olmadığını anlamak için girilen değerle DB'dekini
'karşılaştırıyoruz. Eşitse scriptin devam etmesini değilse (Else) Hata
'döngüsünü Redirect metoduyla bir önceki sayfaya gönderiyoruz.

If Kullanici_Adi_Kontrol.EOF Then
Response.Redirect "UyeGiris.asp?Yanlis=Kullanici_Adi"
'Kullanici_Adi sütünunu son kayıta kadar tarıyoruz ve eğer
'bulunamazsa Request metoduyla hata değerini bir önceki sayfaya
'gönderiyoruz.

Else
'Değilse devam et diyoruz.

Sifre=Trim(Kullanici_Adi_Kontrol("Sifre"))
'Sifre'yi de demin bağlandığımız SQL bağlantısıyla doğrulanmasını
'istiyoruz. (Trim komutuyla girilen değerlerin sağında ve solundaki boş alanları temizliyoruz...)

If GirilenSifre=Sifre Then
'GirilenSifre değişkenimizin değeriyle DB'deki şifre tutuyorsa, yani
'birbirine eşitse, Isim değişkenimize demin bağlandığımız SQL
'metodumuzla DB'deki Adi bölümündeki tutulan değeri atıyoruz.

Isim=Trim(Kullanici_Adi_Kontrol("Adi"))
%>
<%
Response.Cookies("Isim")=Isim
%>
'Aldığımız Isim değerini Cookie olarak yaratıyoruz.
'Cookie'mizi yazdırdıktan sonra, sayfamızı Redirect metodumuzla kullanici_adi.asp'ye yönlendiriyoruz...

<%Response.Redirect kullanici_adi & ".asp"
Else
'Eğer bu şartlar doğru değilse (GirilenSifre ile Sifre aynı değilse) bir
'önceki sayfaya Request metoduyla hata değerini döndürüyoruz.

Response.Redirect "UyeGiris.asp?Yanlis=Sifre1"
End If
End If
'Bağlantılarımızı Kapatıyoruz.
%>

<%Baglantimiz.Close
Set Baglantimiz=Nothing
%>

Değerli Arkadaşlarım. Şimdi isterseniz bu kodumuzun işleyişini biraz inceleyelim. Ben daha önce "oguzgul" kullanıcı adıyla ve "parola" şifresiyle kayıt olmuştum. Ve daha sonra bu dosyalarımızın bulunduğu dizine kullanıcı adımı içeren bir asp sayfası yaptım.

Yani ne? "oguzgul.asp" Tabii bunu CreateTextFile'la da yapabiliriz. Tek yapmanız gereken Dosya yaratma dersimizden hatırlayın. Dosya.txt yerine kullanici_adi.asp yazabilirsiiz.. Bu kadar basit.

Neyse uzatmayalım. Ben elle yaptım. Ve bu sayfaları çalıştırıp kullanıcı adını ve şifreyi doğru girersem Redirect metodu benim girdiğim kullanici_Adi değerini alacak ve kullanıcı adıma ait olan sayfaya yani oguzgul.asp'ye götürecek.

Hatırlarsanız UyeGirisIslem.asp sayfamızda bir Cookie yaratmıştık. Ne yapıyordu DB'deki Adi değerini alıyordu ve Temporary Internet Files Klasörümüze gönderiyordu.

İşte Oguzgul.asp'de de Request.Cookies metoduyla bu Isim adını verdiğimiz Cookie'yi okutarak sayfaya adımızı bastırıyoruz. Örnek imajları inceleyin. Daha iyi anlayacaksınız...


UyeGiris.asp'yi çalıştırdığımız zaman aşağıdaki gibi bir görüntü gelecektir... Ben denemek için yanlış kullanıcı adı, bir dahakinde de yanlış şifre girişi gerçekleştiricem. Bakalım gerçekten koruma sağlıyormu?


Gördüğünüz gibi yanlış kull. adıyla giriş yaptım ve UyeGirisIslem.asp adlı dosyamızda hatırlarsanız SQL komutlarımızla kontrol yapmıştık. Girilen değer, DB'deki değere eşit değilse hata değeri döndürecek ve UyeGiris.asp'ye bir değer dönderecekti ve bu değein UyeGiris.asp'deki değeri ekrana Response edilecekti. Gördüğünüz gibi... Aynı sonuç şifre için de


geçerlidir. Şimdi kullanıcı adını doğru girip şifreyi yanlış girelim. Ve sonucu gözlemleyelim.

Gördüğünüz gibi, yanlış şifre bizim yine sayfaya girmemize emgel oldu... Şimdi doğru girişi yapalım. Ve ASP'nin büyüsüne gerçekten inanalım...


Gördüğünüz gibi kullanıcı adını ve şifreyi doğru girince, kodumuz benim girdiğim kullanıcı adını aldı ve bu isimde bir sayfa aradı. Bulunca da bu linke yöneldi... Yani oguzgul.asp'ye...

Bu sayfamıza yönlendik ama iş bununla bitmiyor. Bu sayfamızın içerdiği kodlarda da Response Request.Cookies metodumuzla, UyeGirisIslem sayfasında yarattığımız Cookie'yi arattırıyoruz ve bu Cookie'nin taşıdığı değeri okutup, sayfaya bastırıyoruz. Bu sayfamızın kodlarını da aşağıda görüyorsunuz. İşte işlem bu kadar.

<%Response.Write "<font face=Tahoma size=2>""" & Request.Cookies ("Isim") & " isimli Üyemizin, Linklerim Sayfası"%>

İşte bu kadar basit ve harika. Önce gördüğünüz gibi Request.Cookies'le "kullanici_adi" adlı Cookie'mizi denetliyoruz. Bağlantımızı yapıyoruz ve bağlantımızı açarak, Link_Sorgulama diye bir değişken yaratarak, hatırladığınızı ümit ederek SQL komutlarıyla "tblLinkler" tablomuzda kullanıcı adı adlı değişkenimizin içerdiği kayıtları tarıyoruz...

(Bu arada farkındaysanız, DB dosyamız aynı fakat Tablo adımız değişik. Hatırladınız mı? Aynı DB içine yeni bir tablo daha eklemiştik. Gördüğünüz gibi, tek dosyayla iş bitiyor. Ne kadar güzel değil mi?)

Bu taramayı kayıtların sonuna gelinceye kadar sürdürüyoruz... Daha sonra If yordamıyla, şayet bu kullanıcı adına ait bir kayıt bulunamazsa kayıt bulunamadı mesajını Response etmesini sağlıyoruz.

Else (Değilse) yordamıyla WHILE NOT yani boş değilse döngüsünü işletiyor ve bir table açarak "Link_Sorgulama" adlı değişkende tuttuğumuz değerleri bir table'da td'ler arasına yazıyoruz. MoveNext ifadesiyle kayıtların sonuna gelinceye kadar sıralıyoruz...

Daha sonra bağlantılarımızı kapatıyor ve butonlarımızı, form alanlarımızı ve linklerini koğuşlandırıyoruz...
İşte bu kadar.