| Editor Login | Register | ||
| > Bilgisayar > Nesne Programlama |
|
|
| ASP.NET’de Üyelik Sistemi |
Özet ile anlatmaya çalışırsak. Üyelik sistemleri programcılık terim deyimiyle Session adlı web uygulamaları üzerinden çalışan ve sayfalar arasında global bir değişken gibi kullanılabilen bir değişken olarak tanımlayabiliriz. Sessionlar sayesinde bir üyenin veya bir ziyaretçinin her türlü bilgilerini sayfalardan sayfalara taşıyabilir ve hatta sitenin gidişatını engelleme, sınırlama veya yasaklama gibi bir çok olayını ayarlayabiliriz. Günümüzün popüler internet sitelerinin bir çoğunda görmüşsünüzdür. İlk önce bir kullanıcıadı daha sonra bir şifre ve bir buton. Gerekli bilgileri yazıp butona bastığınız takdirde aradan belirli bir süre geçip daha sonra eğer kullanıcıadı ve şifrenizi doğru olarak girdiyseniz sizi oturum sayfalarına ve asıl uye sayfalarına transfer olduğunuzu görürsünüz. Bu sayfalara url şeklinde kullanıcı adı ve şifre girmeden girdiğinizdede erişemediğinizi ve sizi direk anasayfaya attığını görürsünüz. Bu algoritmanın özü şudur. Kullanıcı adı ve şifre yazıldıktan sonra ve butona basıldığında. Veritabanına bağlan, kullanıcının yazdığı kullanıcıadı ve şifreyi text kutularından al ve bunları veritabanından kontrol et. Veritabanında bu kullanıcı adı ve şifresi tam tutan kişinin uyenosunu veya id nosunu veya adı soyadı (isterseniz elli farklı kolonu bile alırsınız) al. Bunları Session değişkenlerine ata ve daha sonra oturum sayfasına yönelt. Gördüğünüz gibi aslında başlangıç basit şekliyle böyledir. Oturum sayfasına yöneldiğinde ise oturum sayfası daha önce programlandığı gibi güvenlik dolayısıyla kişinin session uyenosunu veya diğer bilgilerini kontrol eder bu değerler null, boş veya farklı bir şekilde girilmişse direk olarak programcının ayarladığı sayfaya yönlendirir. Yok eğer bilgiler tutuyor ise güvenlik duvarı aşılmış olur ve sayfa o uyeyi transfer etmez böylece oturum açılmış olur. Şimdi sizlere yapacağım açıklamalı bir uygulamayla sessionların nasıl işlem gördüğünü açıklamaya çalışacağım. Yapacağım fazla detaylı olmayan bir örnek olacak. Microsoft Access ile bir veritabanı kuralım. Konumuz şöyle olsun. Web portalımız sadece iki sayfadan oluşacak ilk sayfa üyelerimizi login yapmak için olsun. Bu sayfaya Default.aspx adını verelim. İkinci sayfa oturum açıldığı zaman transfer edilecek olan Oturum.aspx sayfası olacak. Oturum sayfası ilk olarak güvenlik olaylarını kontrol edecek UyeNo boş girildiği takdirde bizi Default.aspx sayfaya transfer edecek böylece Oturum.aspx sayfasına UyeNosu olmadan erişim asla olmayacak. UyeNosu dahil olarak geldiğinde ise bizi serbest bırakacak ve var olan uyenosuna göre veritabanından sorgu yapıp istediğimiz bilgileri sayfaya yükleyecek. İlk olarak veritabanımızı oluşturalım. Basit bir uygulama olduğu için Microsoft Access veritabanını kullanmaya yatkın görüyorum. Bu arada yanlış anlaşılmasın Microsoft Accessi küçümsemiyorum sadece ufak uygulamalarda kullanımı daha kolay :). Veritabanımın ismi Ziyaretci olsun uzantısıyla beraber Ziyaretci.mdb. Açtığımızda aşağıdaki görüntüyle karşılaşacağız. İlk olarak yeni bir tablo oluşturalım. Bir veritabanının nasıl oluşturulacağı ile ilgili bilgileri YazilimUzmani sitesine daha önceden yazmış olduğum SQL ile baştan sona veritabanı adlı makalede detaylı olarak açıkladım. Merak edenler detayları oradan öğrenebilirler. Tablomuzu oluşturuyoruz. Tablomuzun adı ZIYARETCILER olsun ilk kolonun adı UyeNo tipi Otonumber konumu ise baş anahtar (Primary Key) olsun. İkinci kolonumuzu KullaniciAdi veri tipi olarakta Text tipini kullanalım. İngilizce karakterlerin özellikle kullanılması ileride çıkabilecek hataları önleyeceğinide hatırlatalım. Üçüncü ve ilk tablomuzun son kolonunada Sifre olarak ayarlayalım veri tipi olarakte yine aynı şekil Text tipini kullanalım. Tablomuzu kaydedelim. Sıra geldi İkinci tablomuza adı ZIYARETCIDETAY olsun. Bu tabloyla ilgili açıklamalarda bulunmak istiyorum. Tablomuzun amacı kendisine sorguyla gönderilecek olan parametreyle UyeNosunu kontrol ederek tutan üyenin tabloda var olan tüm bilgilerini sayfa üçe yüklemesi olacak. İlk Kolonumuza yine UyeNo adını veriyoruz veri tipi olarak Number veri tipini veriyoruz. İkinci kolunumuza Adi, üçüncüye Soyadi, dördüncüye Adres ve beşinciyede Email adlarını veri tipi olarakta her birine Text veri tipine atayalım. Portal olarak iki tane sayfa tasarlayacağız. Birisi login sayfası diğeride oturum sayfası olacak. Verilerimiz için extradan bir kayıt sayfası oluşturmayı düşünmüyorum. İlk sayfamız olarak sizlere takdim ettiğim sayfa web uygulamalarının baş sayfalarından biri olan Default.aspx sayfası olsun. Bu makalemde formu tasarlayıp direk kodlara geçeceğiz extradan HTML kodlarına değinmeyeceğiz. Evet şimdi yaptığımız kayıt için sorgulama yeri yapacağımız login sayfasına. Login sayfası olarak daha öncedende belirttiğim gibi Default.aspx olarak ayarlıyoruz. protected void baglan_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + this.Server.MapPath("Ziyaretci.mdb")); OleDbCommand com = new OleDbCommand("SELECT * FROM ZIYARETCILER WHERE KullaniciAdi=@KullaniciAdi And Sifre=@Sifre", con); com.Parameters.Add("@KullaniciAdi", TextBox1.Text); com.Parameters.Add("@Sifre", TextBox2.Text); con.Open(); OleDbDataReader Reader = com.ExecuteReader(); while (Reader.Read()) { Session["UyeNo"] = Convert.ToString(Reader[0]); Response.Redirect("Oturum.aspx"); } con.Close(); } Kodları isterseniz kısaca açıklığa kavuşturalım. Makalenin en başında sizlere anlattığım gibi üyelik sistemlerinin temel işlevi: bağlan, kontrol et eğer tutuyorsa izin ver veya bilet kes ve yönlendir. C# ile daha önceden kod yazmış olan arkadaşlar belki bu kadarlar için açıklama gerekmediğinin kanısındadırlar fakat ben diğer arkadaşlarımız için yinede anlatma gereksinimi duyuyorum. Oledb nin bağlantı destekleyicisiolan Provider kelimemizi kullanarak bağlantımızı oluşturduk ve command nesnemizi oluşturarak işlemimiz kontrol yani normal sorgulama işlemi olduğu için, sorgu cümleciğimizi yazdık burada extradan yaptğım bir olay WHERE kriteri ile kullanıcı adı ve şifreye direk ulaşmak oldu. Aksi takdirde SELECT * FROM ZIYARETCILER deseydim, o tabloda var olan tüm kayıtlar tek tek okunacak ve kontrol edilecekti. Buda performansa etki edebilir. Bunun yerine direk WHERE komutuyla işimizi sql tarafında çözmüş oluyoruz. Böylece kodlarda extra çaba harcamamış oluyor. KullanıcıAdı şifre bulunduğu takdirde Session ile o kişinin o an veritabanından bize gelen UyeNosu sessiona eklenecek ve Oturum.aspx sayfasına transfer edilecektir. Kullanıcı adı ve şifre tutmazsa WHERE kriteri herhangi bir koşulu bulamadığı için arama sonuna gelecek. Döngü son bulacak ve herhangi bir transfer işlemi olmayacak. Bunun sonucundada login sayfası duracaktır. Login sayfamızı böylece bitirmiş olduk. Sırada Oturum.aspx sayfamız var hemen açıklamasına başlayalım. Oturum.aspx sayfamızın temel işlevi en başta uyelere özel olması ve uyeno bazlı çalışıyor olması olacaktır. Bu yüzden herhangi bir uyeno gelmezse derhal başlangıç sayfasına geri göndermelidir. UyeNo varsa , bu numara doğrultusundan tabloda karşılığı olan bilgileri çekip text kutularına aktaracak.
İlk olarak bu koda dikkat etmenizi istiyorum. Sayfanın güvenliğini ayarlayan kod budur. Dışarıdan herhangi bir kişi direk Oturum.aspx sayfasına girince herhangi bir Session atanması olmayacağı için form yüklendiği anda kontrol edilecek ve Default.aspx sayfasına aktarılacaktır. protected void Page_Load(object sender, EventArgs e) { if (Session["UyeNo"] == null) Response.Redirect("Default.aspx"); BilgileriGetir(); } private void BilgileriGetir() { OleDbCommand com = new OleDbCommand("SELECT * FROM ZIYARETCIDETAY WHERE UyeNo=@UyeNo", new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + this.Server.MapPath("Ziyaretci.mdb"))); com.Parameters.Add("@UyeNo", Session["UyeNo"]); com.Connection.Open(); OleDbDataReader reader = com.ExecuteReader(); while (reader.Read()) { TextBox1.Text = (string)reader[1]; TextBox2.Text = (string)reader[2]; TextBox3.Text = (string)reader[3]; TextBox4.Text = (string)reader[4]; } com.Connection.Close(); } Kodlar gördüğünüz gibi sanırım anlaşılmayacak hiç birşey yok. Bir prosedür tanımladım bu prosedur uyenosuna göre gerekli olan bilgileri getiriyor. UyeNosunu Sessiondan atadım sonuç. |
|
| Bağlantılar: bilgininefendisi.net |
| Open Source Document Project | AUP&TOS |