Asp.Net Cookie ile Facebook Tarzı Beni Hatırla
Bugün ki konumuzda Asp.Net kullanarak kullanıcı girişi yaptıktan sonra geri giriş sayfasına döndüğünde tekrar yönlendirdiğiniz sayfaya nasıl döneceğinizi anlatacağım.
Entity Framework Kullanacağımız için bir adet kullanıcı database’si Primay Key olmak zorunda yoksa Entity Framework Çalışmaz
İlk Olarak Databasemizi Oluşturuyoruz.
Kafanızı karıştıran şeyler olabilir tabloyu oluşturduktan sonra prosedür ekleyerek elemanları ordan insert ettim. yani kafanız karışmasın fazla uğraşmamak için yaptım.
Sql Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | create table AppUser (Id Tinyint identity(1,1)primary key,UserName nvarchar(200),RealName nvarchar(200),Pass nvarchar(max),Birtday datetime,IsActiveStat bit) create proc otokayit1 (@username nvarchar(200),@RealName nvarchar(200),@Password nvarchar(max),@birtday datetime,@activestat bit) as begin insert into AppUser (UserName,RealName,Pass,Birtday,IsActiveStat) values (@username,@RealName,@Password,@birtday,@activestat) end execute otokayit1 'ibanez75612','Furkan','sifre','20120618 10:34:09 AM',true execute otokayit1 'PearlyDark','İsmial','sifre','20120618 10:34:09 AM',true execute otokayit1 'BoysofHells','Hüseyin','sifre','20120618 10:34:09 AM',false execute otokayit1 'gararamo','ramo','sifre','20120618 10:34:09 AM',true execute otokayit1 'test','testing','sifre','20120618 10:34:09 AM',false execute otokayit1 'admin','admin','sifre','20120618 10:34:09 AM',true select *from appuser |
Projemizde Model Oluşturuyoruz.
Projemize sağ tıklıyoruz Add >New İtem.. olan kısmı seçiyoruz.
Sonrasında ilk olarak data kısmı sonrada ADO.NET Entity Data Model Kısmını Seçiyoruz.
Şimdi veritabanını oluşturduğumuz için EF Desinger from Database ye tıklayıp Next Diyoruz.
Bu sayfada benim eski connection’um var New Connection kısmına basıyoruz.
Sonrasında Server Name yazıyoruz bildiğiniz Sql Managemant Studiodaki gibi yazıyoruz Select Databaseyi Kullandığınız Databaseyi Seçin.
Bağlantıyı oluşturduk alttaki kısmı çok önemli webconfig’e bağlantıyı ekliyor ve databaseyi eskisi gibi connection ile uğraşmıyoruz.
Burdan kullanacağınız tabloyu tikleyiniz sonra finish butonuna basın.
Bu hatayı 2-3 kez sorabilir siz ok tuşuna basın sonra düzelir.
Modelimizi oluşturmuş olduk ve tablolarıda görebiliyoruz.
Default Yani Giriş Sayfası Tasarım Görünümü
Html Kodlarını Buraya Atıyorum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EvdeintProg.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link href="Content/bootstrap.min.css" rel="stylesheet" /> </head> <body> <form id="form1" runat="server"> <div class="container"> <asp:Label ID="LblAd" runat="server" Text="Kullanıcı Adı"></asp:Label><br /> <asp:TextBox ID="txtname" runat="server" CssClass="form-control"> </asp:TextBox><br /> <asp:Label ID="LblSoyad" runat="server" Text="Şifre"></asp:Label><br /> <p> <asp:TextBox ID="txtsifre" CssClass="form-control" TextMode="Password" runat="server"></asp:TextBox> </p> <asp:CheckBox ID="Chbxkay" Text="Kaydet" runat="server" /> <br /> <asp:Button ID="Btnac" runat="server" CssClass="btn btn-info" Text="Giriş Yap" OnClick="Btnac_Click" /> <br /> <br /> <asp:Label ID="lblinfo" runat="server" CssClass="label-warning" Text=""></asp:Label> </div> </form> </body> </html> |
Butonun Kodları
İlk Olarak Yukarıda Entties Oluşturmuştuk onu giriyoruz benim projemde online databasem var bensize örnek için öyle yaptım size modelde verilen entites olanını yazacaksınız.
ikinci olarak sonuc bizim normalde ado.nette yaptığımız kodu entity framework ile çekiyoruz yani bu yeni bileşen daha kolay ve daha az kod yazıyoruz.
Var değişkeni herşeye uyduğu için var kullanıyoruz. Sonra From i in db.Appuser yani tablo ismini yazıyoruz.
Burdan Sonra i sizin databasedeki elemanlarınızı çekiyor ve where komutu ile username i textbox ile kontrol ettiriyoruz equals burada == anlamını görüyor güvenlik için öyle yazdık. Values ile kontrol ettiğimiz üyelik aktif ise valuesi 1 dir yoksa 0 dır o yüzden var ise 1 yazar.
Sonuna SingleOrDefault(); yazdık çünkü tek sorgu çek fazlası olursa yada eksik olursa alma anlamında.
İfle dolu diye Kontrol ettirdik
Sonra İçine Cookie Oluşturup Kullanıcı adı şifreyi aldık textboxların içinden Session’ı Kullanıcıyı Tanımak İçin İçeri Aldık Ve Profile Yönlendirdik.
Hatalı ise Else Düşüp Yanlış Hatası Verdi.
Kodların Yazılı Hali
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | protected void Btnac_Click(object sender, EventArgs e) { benimproje_deneEntities1 db = new benimproje_deneEntities1(); var sonuc=(from i in db.AppUser where i.UserName.Equals(txtname.Text) && i.Pass.Equals(txtsifre.Text)&& i.IsActiveStat.Value select i).SingleOrDefault(); if (sonuc !=null) { if (Chbxkay.Checked) { HttpCookie cookie = new HttpCookie("personal"); cookie["kullanici"] = txtname.Text; cookie["sifre"] = txtsifre.Text; cookie.Expires = DateTime.Now.AddMonths(20); Response.Cookies.Add(cookie); } Session.Add("Login", sonuc); Response.Redirect("Profile.aspx"); Response.Write("<scrip> alert('Giriş Başarılı'); </script>"); } else { lblinfo.Text = "Giriş Başarısız Hatalı Kullanıcı Adı Veya Şifre"; } } |
Şimdi Form Load’a Geliyorum
Burada Cookieleri kontrol ettik ve geri çektik sonra databasemizide aynı şekilde Enttiyi çektik daha sonra if ile cookie süresi var ise gelsin dedik sonra
cookieleri String bir değişkene atadık. Sonra aynı kontrol kodlarımızı yazdık textbox yerine cookie degişkenlerini yazdık ve kullanıcıya tekrar sessiona aldık çünkü session ile diğer sayfada kullanıcıyı tanımak için kullandık. Ve Profil Sayfasına Yönlendirdik.
Ve Sayfamız Hazır!!!!
Page Load Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | if (Session["Login"] != null) { Response.Redirect("Profile.aspx"); } if (Request.Cookies["personal"] != null) { HttpCookie gelen = Request.Cookies["personal"]; benimproje_deneEntities1 db = new benimproje_deneEntities1(); if (gelen.Expires < DateTime.Now) { string kulanici = gelen["kullanici"]; string sifre = gelen["sifre"]; var sonuc = (from i in db.AppUser where i.UserName.Equals(kulanici) && i.Pass.Equals(sifre) && i.IsActiveStat.Value select i).SingleOrDefault(); if (sonuc != null) { Session.Add("Login", sonuc); Response.Redirect("profile.aspx"); } } } else { lblinfo.Text = "Yeniden Giriş Yap Cookieler Temiz "; } |