İçeriğe geç

apoStyLEE

Abdullah Uğraşkan

  • Ana sayfa
  • Bu Masalda Peri Yok – Podcast
  • Medium
  • Kategoriler
    • Modern Web
    • Asp.Net
    • jQuery
    • Sql
    • Diğer Diller
    • Kişisel Şeyler
    • Teknolojik
    • Bisiklet
    • Görsel
    • WordPress
  • Hakkımda
  • quup
  • twitter
  • github
  • ask.fm
  • youtube
  • linkedin

arayan bulur

Etiket: login

ASP.NET ile Login, MasterPage ve RequiredFieldValidator Kullanımı

Merhabalar, ASP.NET ile kullanıcı girişi olayını veritabanına bağlantılı bir şekilde nasıl yapabilirizi anlatmaya çalışacağım. Anlatacağım mekanızmada .Net ile birlikte gelen Login nesnelerini kullanacağız. Nedeni ise güvenlik ve işlevsellik. Özellikle giriş işlemlerinde, kullanıcıyı bir önceki sayfaya yönlendirmek tam bir kabus ! Kabus derken yanlış anlaşılmasın, birazcık kod yazmak gerektirir manasında :) ASP.Net ile yapılmış sitelerde şunu illaki görmüşsünüzdür. Bir sayfa kullanıcı girişi gerektirmektedir, kullanıcı adınız ve şifrenizi yazdığınızda, eğer bilgileriniz doğru iste geldiğiniz sayfaya yönlendirilirsiniz. Bu noktada adres satırında “?ReturnUrl=Default.aspx” gibisinden bir önceki sayfanın adresi görünür. Bunu kendimiz kodlayarakta yapabiliriz fakat ASP.NET’ de hazır yapılmışı zaten var :)

Öncelikle bu adresteki videoları kesinlikle izlemenizi tavsiye ederim. Bende ordan izledim :D

Sadece püf noktalarına değineceğim, mevcut dosyaları buradan indirebilirsiniz.

Varsayılan olarak web.config dosyamızdaki authentication mode windows dur. (<authentication mode=”Windows” />) öncelikle bu satırı <authentication mode=”Forms” /> olarak değiştiriyoruz. Varsayılan olarak giriş formumuzu Login.aspx sayfasına yönlendirir, eğer biz farklı bir dosya veya klasöre yönlendirme yapmak istersek bunun için altına şu düğümü eklememiz gerekiyor. Ben Login adında bir klasörün içerisine yönlendiriyorum.

<authentication mode="Forms">
<forms loginUrl="~/Login/"/>
</authentication>

LoginView Nesnesine bir göz atalım.

<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
Kimsin sen ?
</AnonymousTemplate>
<LoggedInTemplate>
Hobaaaaa <asp:LoginName runat="server" ID="LoginName1" />
</LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="~/Login/Exit.aspx" LogoutAction="Redirect" />
AnonymousTemplate : Kullanıcı sisteme giriş yapmamış ise görüntülenecek olan kısım.
LoggedInTemplate : Kullanıcı giriş yapmış ise görüntülenecek olan kısım.
LoginName : Adı üzerinde login olan kullanıcının adı veya görüntülenmesini istediğiniz bilgisi.
LoginStatus : Eğer kullanıcı giriş yapmış ise Çıkış (Logout), eğer kullanıcı giriş yapmamış ise Giriş (Login) ibaresi görüntülenecek olan kısımdır. Bu nesnedeki LogoutPageUrl özelliği çıkış butonuna tıklanıldığında gidilecek olan sayfayı, LogoutAction ise çıkış butonuna tıklanıldığında yapılmasını istediğimiz işlemi belirtiyoruz.

MasterPage.master adındaki meşhur MasterPage‘ miz. Yani sitemizin ana şablonu ! Eğer dosyaları incelerseniz çok basit birşey olduğunu görürsünüz. Bu mekanızma sayesinde tasarım işimiz çok çok rahat bir şekilde ilerliyor.

Validation nesneleri ile formların doldurulma koşullalarını belirleyebiliyoruz. Yani şu id ye sahip alanın içine sadece rakam girilsin, yada o alan boş bırakılamasın vb.. koşulları oluşturmamıza olanak sağlıyor. Normalde JavaScript ile bu işlemi yapıyor ve gidip asp yada php kodlarımızın bulunduğu yerlerde aynı koşulları sağlamamız gerekiyorduki kaçak olmasın fakat Validation nesneleri kod kısmında da karşılaştırma yaptığı için hem çok daha güvenli hemde çok daha kullanışlı. Bir bu örneğimizde RequiredFieldValidator’ u kullandık. Buradan diğer validation nesneleri hakkında bilgi alabilirsiniz.

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="kullaniciadi"
ErrorMessage="Kullanıcı Adını Boş Bıraktınız.!">
</asp:RequiredFieldValidator>

Kullanımı çok basit hemen yukarıdaki örnekteki özelliklere göz atalım.
ControlToValidate = Hangi form alanının kontrol edileceğini belittiğimiz etiketimiz. Forum alanın ID sini buraya giriyoruz.
ErrorMessage= Adı üstünde, hata olduğunda çıkacak uyarıyı giriyoruz.

Bu kadar basit arkadaşlar, abartısız 3 dakikada basit ve güvenilir bir Kullanıcı Girişi (Login) yapabilirsiniz.

Yayın tarihi 9 Şubat 200929 Haziran 2010Kategoriler Asp.NetEtiketler asp.net, login, masterpage, validatorASP.NET ile Login, MasterPage ve RequiredFieldValidator Kullanımı için 3 yorum

ASP.NET ASP Session Transferi

ASP.Net ile gün geçtikçe farklı tecrübeler ediniyor ve fırsat buldukçada sizlerle paylaşıyorum. Dün başıma gelen session olayını kendi kurallarıma göre çözmeyi başardım. Önce senaryoyu sizlere anlatayım.

Önceden klasik asp ile yapılmış bir finans modülü bulunuyor. Siteye giriş yapan kullanıcı session nesnesine atanan id numarası ile burda işlemlerini yapıyor.

Sonradan site Asp.Net ile yeniden yapılıyor fakat Finans modülüne el değmiyor, nedenide geliştirilecek veya değiştirilecek bir durumun olmaması.
Sitenin Giriş (Login) bölümü asp.net ile yapıldığından, klasik asp ile asp.net ile oluşturulan session bilgilerini okuyamıyoruz ve haliyle modülü çalıştıramıyoruz.

Açık konuşmak gerekirse bu durumu farkettiğimde, Google’ dan ufak bir araştırmayla sonuca gidebileceğimi düşünmüştüm. Sonuçta Microsoft bunu bir şekilde düşünmüş olmalıydı. Bir sürü sonuca ulaştım fakat istediğim kalitede, istediğim işlevsellikte bir sonuca ulaşamadım. Zamanımda ciddi anlamda kısıtlıydı, genel olarak izlenilen yollar burda, burda ve burdaki adreslerde bulunuyor. Emre abi ve Yunus Emre ile biraz beyin fırtınası yaptıktan sonra aklıma birkaçtane fikir geldi. Kafadan veritabanını olaya bulaştırmak istemiyordum, bu yüzden bir çereze (cookie) id bilgisini atıp asp okumak geldi. Güvensiz olduğunu biliyorum fakat güven konusuna gelmeden önce zaten çerezi okuyamıyorsunu, yani sessiondaki durum çerezde de bulunuyor. (Belkide ben becerememişimdir.) Sonrasında işin içine veritabanını birşekilde bulaştırmam gerektiğini anladım. Veritabanına bir tablo ekleyip session.sessionid bilgisini, kullanıcı id sini, birde rastgele bir sayıyı eklemeyi düşündüm. Çokta mantıklı geldi çünkü session.sessionid siteye giren her kullanıcıya iis tarafından atanan bir kimlik numarasıydı. Rastgele sayıyı adres satırından gönderip, sql cümlesinde de rastgele sayı ve session.sessionid ile birlikte doğrulamayı yapıp bilgiyi klasik asp de bir sessiona atayıp dilediğim gibi kullanabilirim diye düşündüm ve işe giriştim. Ama gördüğüm bu teorimide çürüttü. ASP.Net’ in sessionid si ile ASP nin ki çok farklıydı. Oyy Allah’ ım dedim bir yolu olmalı, bu sefer kafamdaki lamba projektör edasıyla yandı ve kullanıcının ip adresini kullanabileceğimi düşündüm.

1. ASP.NET Giriş sayfasından giriş yapılır.
o Veritabanındaki Session adındaki tablonun içindeki alanlara gerekli bilgileri yazıyoruz.
– ID = Gerekli olan bilgi, yani sessiona ne atamak istiyorsanız o bilgi.
– RastgeleSayi = Randomize sayı üreten bir fonksiyonla üretilen sayı.
– IP = Kullanıcının ip adresi.
o Yukarıdaki RastgeleSayi yi ASP.NET’ de de bir sessiona da atıyoruz.

2. ASP.NET ile Yapılmış Sayfalardan ASP ye Session Transferi İçin.
o ASP.NET ile RastgeleSayi sessionunda tutulan sayıyı adrese iliştiriyoruz. Örnek: deneme.asp?R= gibi..

3. Deneme.asp Sayfasından İstediğimiz Session Bilgisine Ulaşmak.
o Select * from Session where RastgeleSayi=’”&request.queryString(“R”)&”’ and IP = ‘”&Request.ServerVariables(“remote_addr”)&”’ cümlesiyle istediğimiz ID değerine ulaşabiliyoruz. Buradaki cümleyi örnek olsun diye yazdım. Kesinlikle Sql Enjeksiyon için veya benzeri durumlar için gerekli düzenlemeleri yapın.

Saat gibi işleyen bir sistem olduğunu söyleyebilirim. Bu şekilde performans açısından da ödün vermiyoruz ek bileşende yüklemiyoruz. Burada beni düşündüren tek nokta güvenlik oldu. Düşünüldüğünde neredeyse bu işin imkansıza yakın olduğunu anlıyorsunuz. Bilgi adres ile birlikte gönderildiği için elle müdehale yapılıp farklı kullanıcıların hesaplarına erişilebilir. Fakat fakat fakat ! kafadan atacağı rakamın veritabanında olması gerekiyor, aynı zamanda karşısındaki kayıtlı ip adresinide bilmesi gerekiyor. Ip adresini bilse bile kendi ip sini nasıl değiştirir bilemiyorum. Burada çok ince bir nokta üzerinde güvenliğimiz ayakta duruyor. %100 güvenliğin olmadığını ve sadece ” Yaradan Hatasız Kodlamıştır.” lafını hatırlatmak isterim :)

Kod yazıp, ortalığı bulandırmak istemedim, sadece mantığı anlatmaya çalıştım. Belki biraz karışıkmış gibi duruyor fakat görüldüğünden çok daha basit. Hertürlü görüşe, taktiğe tekniğe açığım. Yorumlarınızı bekliyorum.

Yayın tarihi 27 Ocak 200929 Haziran 2010Kategoriler Asp.NetEtiketler asp, asp.net, login, session, transferASP.NET ASP Session Transferi için bir yorum
WordPress gururla sunar