Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ferhat Nutku
Ferhat Nutku
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
4 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: arasindaki bilgiler button degeri degerler hidden kelimeleri kodlari numarali saklanir. sender sunucu sunucuya windows yollanir. ASP.NET Ferhat Nutku
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 10.1.2005
Okunma Sayısı : 40410
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 4.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 4.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 4.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 4.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET'te Durum Yönetimi 1
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Web Form’larında internet tarayıcısı ile web sunucusu arasındaki iletişim HTTP iletişim protokolü ile gerçekleştirilir. Bu protokol stateless bir yapıya sahiptir. Biraz açarsak biz web formumuzu sunucuya geri gönderdiğimizde yani örneğin bir linke tıkladığımızda veya doldurduğumuz bir veri giriş formunu gönderdiğimizde gönderilen bilgiler kendi bilgisayarımızda kalıcı değildir. Gönderdiğimiz bilgiler sunucuya gider ve orada işlenir.

Web sayfası programı yazmanın, windows programı yazmaktan önemli olan farklarından biri durum yönetimidir. Örneğin bir windows programında global değişken tanımlamak ve kullanmak çok sık yapılan, çok faydalı bir tekniktir. HTTP’nin durumsuz yapısının dezavantajlarından kurtulmak için web programlamada ve ASP.NET’te web formu durum yönetimi kavramı geliştirilmiştir. Çeşitli türde metotlar ile birtakım bilgilerin, değişkenlerin, nesnelerin kendi bilgisayarımızda veya sunucuda kalıcı olarak kalması sağlanır. Bir anlamda durum yönetimi ile windows programlarındaki global değişkenlerin görevleri yerine getirilmektedir.

Bu makale serisinde sunucu (server) ve istemci (client) yanlı durum yönetimi tekniklerini göreceğiz.

İstemci Tabanlı Durum Yönetimi Teknikleri:
Bu teknikleri dört ana başlık altında ele alabiliriz.
  • View State (Görüntü Durumu)
  • Hidden Form Fields (Gizli Form Alanları)
  • Cookiler (Çerezler)
  • Query Stringler (Sorgu Kelimeleri)


Görüntü Durumu (View State)
View state sayesinde sayfamızda bulunan sunucu kontrollerinin çeşitli özellikleri içerdikleri değerler güvenli bir şekilde sunucuya yollanır. Örneğin, iki TextBox içerisine yazılan sayıyı toplayan bir metot yazdığımızda TextBoxlar içindeki değerler sunucuya gönderirilir. Sunucuda toplama işlemi yapılır sonuç sayfaya yazılarak bize geri yollanır. ASP.NET’te view state yönetimi otomatik olarak yapılır ve sunucuya gönderilen sayfadaki tüm kontroller için değerler view statelerde saklanır. Sunucu kendisine gelen sayfadaki view state değerlerini işler ve değerleri alır. Sayfa istemciye geri yollanırken gene server kontrollere ait değerleri view statelere depo eder.

Bu makaledeki tüm kodları ve daha fazlasını derli toplu olarak bu linkten elde edilirsiniz. Kaldık Örneğimizde ard arda sayı toplamayı ele alacağız. Bir WebFormu açın ve içerisine bir label, button yerleştirin. Label’ın text özelliğini 0 yapın. Button’un text özelliğini ileri yapabilirsiniz. Sayfanın yüklendiği an çalışması için aşağıdaki kodu yazın.

private void Page_Load(object sender, System.EventArgs e)
{
if (ViewState["sayi"]==null)
{
ViewState["sayi"]=0;
}
}
Burada ViewState’ten sonra gelen parantezler içerisine değişkenimizin ismini giriyoruz. Sayfa yüklendiğinde eğer oluşturulmuş bir view state yoksa bu kod ilk değer olarak view statimizi sıfır yapıyor.

private void Button1_Click(object sender, System.EventArgs e)
{
ViewState["sayi"]=(int) ViewState["sayi"]+1;
Label1.Text = ViewState["sayi"].ToString();

//Label1.Text=Convert.ToString(Convert.ToInt32(Label1.Text) + 1); doğru
}
İlerle tuşuna bastıkça sayfa sunucuya geri yollanır. Sayfa yollanmadan önce view state içersinde saklamış olduğumuz sayi değişkeni de bir arttırılır ve sayfadaki labelda gösterilir.
Aslında label kontrolünün de bir view stati vardır ve içerisindeki yazı view statte saklanır. Yorum olarak gösterilen kısım sorunsuz çalışır.
Formumuza textbox1 ve textbox2, bir label ve bir button daha yerleştirelim. Button’u btnTopla olarak adlandıralım. Nihayet aşağıdaki kodu yazabiliriz.

private void btnTopla_Click(object sender, System.EventArgs e)
{
lToplam.Text=Convert.ToString(Convert.ToInt32(TextBox1.Text) + Convert.ToInt32(TextBox2.Text));
}
Şunu artık rahatlıkla söyleyebiliriz ki TextBox1 ve TextBox2’nin içerisindeki değerler de view stateler içerisinde saklanır. btnTopla tuşuna bastığımız an TextBoxlar içerisindeki değerler sunucuya yollanır, toplanır ve bize geri yollanır.
View state nesnesi karakter katarları gibi küçük ölçekli verileri saklamak için uygun bir .NET durum nesnesidir.

Gizli Form Alanları (Hidden Form Fields)
Eski dostumuz hidden field gene karşımızda. ASP.NET yardımlarında HtmlInputHidden olarak bahsedilen kontrol araç kutusunda HTML bölümünde yer alıyor. Bu kontorlü seçip forma yerleştirdiğimizde, kontrole formun arkasındaki .cs kodundan erişemeyiz.


Resim 1. HTML Hidden kontrolü.

<INPUT style="Z-INDEX: 104; LEFT: 297px; POSITION: absolute; TOP: 322px" type="hidden" id="htmlGizli" value="0" runat="server">
HTML kodunu açıp yıkarıdaki gibi düzenlersek html hidden kontrolümüz bir server kontrol olmuş olur. Bu işlemi istersek IDE aracılığıyla da yapabilirdik. Dizayn sayfasında gizli alana sığ tıklayıp HTML kontorlünü sunucu kontrolü haline dönüştürebiliriz.


Resim 2. HTML Hidden kontrolünü server kontrol haline dönüştürmek.

Az önce yaptığımız örnekteki projeye yeni bir sayfa ekleyelim ve üzerine bir label ve bir button koyalım.
Sayfanın arkasındaki koda aşağıdakileri yazalım. Button1’e tıkladıkça label1 içerisindeki değer birer birer artacaktır.

private void Button1_Click(object sender, System.EventArgs e)
{
htmlGizli.Value = Convert.ToString(Convert.ToInt32(htmlGizli.Value)+1);
Label1.Text = htmlGizli.Value.ToString();
}
DİKKAT: HTMLInputHidden kontolü içerisine şifre, hesap numarası gibi önemli değişkenlerinizin değerlerini girmeyin. Sunucuya bilgi yollamak için gizli alan kullanmak güvenli değildir. Gizli alan her ne kadar açılan sayfada gözükmese de sayfanın kaynak kodunun içerisinde, değeri ile birlikte görünür. Bunu örneği çalıştırarak deneyebilirsiniz.
Gizli alanlar sayfalar arasındaki geçişlerde çeşitli bilgilerin saklanması için kullanılabilir.

Çerezler (Cookies)
Çerezler istemci bilgisayarında saklanan şifrelenmiş text dosyalarıdır. Çerezler Cookies adlı bir dizinde saklanır. Çerezler sunucu kaynaklarını tüketmezler. Günümüzde birçok web tarayıcısı çerezlerin boyutunu 4096 byte olarak sınırlandırmıştır. Ancak yakında 8192 byte boyutunda çerezlerle çalışabilen tarayıcılar çıkacaktır. Çerezler içersinde genellikle kullanıcı adı, kullanıcı tercihleri gibi bilgiler saklanır. Çerezler şifrelenmiş olarak .txt dosyalarında tutulur.
Çerezler belli bir yaşam ömrüne sahip olabilir. Yani istediğimiz süre sonunda çerezimizi kullanılmaz hale getirebiliriz. Bu güvenliğe önemli bir katkı sağlar. Örneğimiz için frmCookie adlı bir webform oluşturalım. Bu forma bir dropdown list ve button yerleştirdikten sonra aşağıdaki kodları yazalım.

private void Page_Load(object sender, System.EventArgs e)
{
DropDownList1.Items.Add("sarı");
DropDownList1.Items.Add("yeşil");
DropDownList1.Items.Add("mor");
}

private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie oc = new HttpCookie("renk"); //1
oc.Values.Add("secilenrenk",DropDownList1.SelectedItem.ToString()); //2
oc.Expires=DateTime.Now.AddSeconds(10); //3
Response.Cookies.Add(oc); //4
Response.Redirect("frmCookie2.aspx");
}
Çözümünüze bir de frmCookie2.aspx adlı bir web form daha ekleyin. Bu forma bir label yerleştirin. Aşağıdaki kodları frmCookie2.aspx içerisine yazın.

private void Page_Load(object sender, System.EventArgs e)
{
HttpCookie oc = Request.Cookies["renk"];
Label1.Text="Seçtiğiniz renk " + oc.Values["secilenrenk"].ToString();
}
İlk önce oc adlı bir HttpCookie nesnesi oluşturduk. 1 numaralı satırdaki ifadeden çerezimizin isminin renk olduğu anlaşılmalıdır. oc nesnesinin values özelliği bir anahtar değer ikilisini alıp çerezleri saklayan bir koleksiyondur. Bu koleksiyona 2 numaralı satırda dropdownlist’ten seçilen değeri, secilenrenk değeri ile sakladık. 3 numaralı satırda çerezimizin ömrünü 10 saniye olarak belirledik. 4 numaralı satırda ise çerezimizi Response nesnesinin Cookies koleksiyonuna ekledik. Bunu yapmazsak çerezimiz çalışmaz.
İkinci kod parçasında ise yeni bir çerez nesnesi renk adlı çerezimizden oluşturuluyor. Bu çerez renk çerezimizin bir kopyası olacaktır ve içerisinde secilenrenk değerini de saklayacaktır. oc.Values["secilenrenk"] ifadesi ile frmCookie.aspx sayfasında seçtiğimiz renk değerini okuyoruz.
10 saniyeyi aşacak şekilde bekleyip sayfamızı tazelersek bir hata ile karşılaşırız. Bu hatada kısaca çerez nesnemizin oluşturulmadığı (yani var olmadığı) bize bildirilir. Çerezimiz 10 saniye çalışır. 10 saniye sonunda geçerliliğini yitirir.

Query Stringler (Sorgu Kelimeleri)
Sorgu kelimeleri sayfalar arasındaki geçişlerde, değişken değerlerini aktarmak için çok sık kullanılan bir yöntemdir. Sorgu kelimeleri yönlendiğimiz sayfanın konumunun sonuna eklenir. Genellikle değişken adları ve bunların değerlerinden oluşur. Örneğimiz için yeni bir form oluşturunuz, üzerine bir label ile bir button yerleştiriniz ve aşağıdaki kodları yazınız.

int i;
private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["ind"]==null)
{
i=0;
Label1.Text=Convert.ToString(i);
}
else
{
i=Convert.ToInt32(Request.QueryString["ind"]);
Label1.Text=Convert.ToString(i);
}
}
Burada i form düzeyinde global olarak tanımlanmıştır. Sayfa ilk çağırıldığında sorgu kelimeri içerip içermediğine bakılır. İçermiyorsa i’nin ilk değeri 0 yapılır ve label1 içerisine yazılır. Eğer sorgu kelimeleri bir değere sahipse bu değer çağırılır ve i’ye aktarılır. Sorgu kelimesi Request.QueryString["ind"] ile öğrenilebilir. Burada ind adlı sorgu kelimesinin değeri okunmaktadır.

private void Button1_Click(object sender, System.EventArgs e)
{
i++;
Response.Redirect("frmQuery.aspx?ind=" + i);
}
Bu kodu da sayfanıza ekleyin. Böylece button1’e herbir tıklamada i nin değeri i arttırılacak ve sayfa kendini yeniden çağıracaktır. Dikkat ederseniz çağrıda sorgu kelimeleri kullanılmıştır. Kullandığımız sorgu kelimesine burada ind adını verdik. Sorgu kelimeleri & işareti ile birleştirilip kullanılabilir.
yonet.aspx?islem=yonay&admin=1 yonet.aspx sayfası islem kelimesine yonay, admin kelimesine 1 değeri verilerek çağırılmaktadır.
Sayfalar arası geçişlerde sorgu kelimeleri direkt olarak tarayıcının adres çubuğunda görünürler. Bu yüzden güvenli olması istenen değişkenler sayfalar arasında sorgu kelimeleri ile taşınmamalıdır.

Sonuç:
İstemci tabanlı durum yönetimi, sunucu kaynaklarını fazla harcamadığı için tercih edilen bir tekniktir. Ancak yüksek güvenlik isteyen uygulamalarda dikkatli kullanılması gerekir. Bu konuyu tamamlayan sunucu taraflı durum yönetimini de ileride ele alacağız.

Makale:
ASP.NET'te Durum Yönetimi 1 ASP.NET Ferhat Nutku
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor