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: application asp.net birbirinden degeri degerleri istemci istemciye kelime metodu nesnesi session sessionid sunucuda tarayici veritabani 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 : 20.4.2005
Okunma Sayısı : 45592
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 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.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 - 2
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Uzun bir aradan sonra ASP.NET’te Durum Yönetimi 1’ in devamı olan makaleyi yazmaya karar verdim. Böylece konu bütünlüğü de bozulmamış oldu. ASP.NET’ te Durum Yönetimi 1 makalesine bu linkten ulaşabilirsiniz. Önceki makalede durum yönetimine neden ihtiyaç olduğunu ve istemci tarafında durum yönetiminin nasıl gerçekleştirildiğini tartışmıştık. Bu makalede sunucu (server) tarafında uygulanan durum yönetimi tiplerini inceleyeceğiz.

Sunuc Tabanlı Durum Yönetimi Teknikleri: Bu teknikleri üç ana başlık altında ele alabiliriz.

  • Session State (Oturum Durumu)
  • Application State (Uygulama Durumu)
  • Veritabanları (Database Support)
Oturum Durumu (Session State) Bir istemci (client), bir web sunucusuna bağlanıp bir ASP.NET sayfası talep ettiğinde sunucu istemciye bir SessionID atar ve bu SessionID’ yi istemciye gönderir. Artık istemcideki web tarayıcısı kapatılıncaya kadar bu SessionID, sunucuda saklı kalır. SessionID sayesinde sunucu, iletişim içerisinde olduğu istemcileri birbirinden ayırabilir. Bu gerçekten ilk bakışta inanılması zor gibi görünen bir yetenektir. Bir web sitesinden talepte bulunan binlerce kullanıcıyı birbirinden ayırt etmek için ASP.NET 120 bitlik bir kelime kullanır. Bu SessionID, URL adreslerinde kullanılmasına izin verilen ASCII karakterlerinden oluşur. Bu kelime özel bir algoritma ile her istemci için tek (unique) olacak şekilde üretilir. Böylece SessionID’ler çakışmaz. Ayrıca, üretilen bu kelime rasgeledir. Bu sayede bir istemcinin SessionID’sini tahmin etmek imkansızlaşır. SessionID, Session nesnesinin SessionID özelliği ile öğrenilebilir. Local olarak bunu şöyle deneyebiliriz:

private void Page_Load(object sender, System.EventArgse)
{
    Response.Write(Session.SessionID);
}
Tarayıcıda sayfaya baktığımızda 0vxururlzx1fzeit3sucf1nf benzer bir yazı görürüz. Yeni bir tarayıcı penceresi açıp aynı sayfaya yönlendirdiğimizde bu yukarıdaki kelimenin tamamen değişiği olan yeni bir SessionID değeri ekrana yazılır. Şimdi session değişkenleri kullanarak bir sayı saydırma uygulamasını ele alalım. Uygulamamız için bir web forma iki button ve bir label kontorlü yerleştirelim. Sayfanın yüklendiği an çalışacak kodları yazalım. Uygulamayı indirmek için tıklayın.

private void Page_Load(object sender, System.EventArgs e)
{
    Response.Write(Session.SessionID);
    Session.Timeout  = 1;
    if (Session["sayi"] == null )
    {
        Session["sayi"] = 0;
    }    
}
Burada session nesnesi içerisine sayi değişkenimizi yerleştiriyoruz. Bunun için Session["sayi"] = 0 yazmak yeterlidir. Sayfa ilk yüklendiğinde Session nesnesi null olacaktır. Bunu kontrol ederek sayi değişkenine ilk değeri olan sıfırı veriyoruz. Artık sayi değişkenimiz sunucuda saklanacaktır. Böylece sanki global olarak saklanmış olan bir değişkene sahip oluruz.

private void Button1_Click(object sender, System.EventArgs e)
{
    Session["sayi" ] = (int )Session["sayi" ] + 1;
    Label1.Text  = Session["sayi"].ToString();
}
İleri düğmesine tıkladıkça Label1 içerisinde sayılar birer birer artar. Her düğmeye basışta sayfa sunucuya gönderilir. Sayi değişkeni session içerisinde saklandığı için değerini korur. Böylece eski değerden yararlanarak onu birer birer arttırabiliriz. Session değişkendeki bir değeri almak için uygun tip dönüşümlerini yapmaya özen göstermeliyiz. Webformunun içerisinde yer alan form nesnesi sessionların gönderilme şeklini değiştirir.

<form id="Form1" method="get" runat="server">
Gönderme metodu olarak post’u kullandığımızda session değişkenler, istemcide gizli bir cookie içerisinde saklanır ve sunucuya yollanır. Get metodunu kullandığımızda ise session değerleri, sunucudan URL içerisine yazılarak gönderilir. İleri düğmesine bastıkça URL adresi de sürekli değişecektir. Post metodu varsayılan metottur. Değiştirilmesi tavsiye edilmez.

Session değişkenlerinin sunucuda tutulma süreleri Session.Timeout özelliği ile değiştirilebilir. Varsayılan değer 20 dakikadır. Bizim örneğimizde ise bu süre 1 dakika ile sınırlandırılmıştır. 1 dakika bekleyip ileri tuşuna bastığımızda saymanın devam etmeyip, baştan başladığını gözlemleriz. Session değişkenlerini temizlemek istediğimizde ise Session.Clear() metodunu kullanırız. Bu metodu kullandığımızda Session["sayi"] null olur.

ASP.NET uygulamasının Session değişkenleri ile ilgili bir takım özellikleri web.config dosyası içerinde de belirlenmiştir. Web.config dosyasını açtığımızda

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
ile karşılaşırız. Burada mode session değerlerinin nerede saklanacağını belirler. Bir ASP.NET uygulamasında session değerleri üç farklı şekilde tutulabilir. InProc modunda session değerleri çalışan IIS prosesinin içersinde saklanır. IIS kapatıldığında, yeniden çalıştırıldığında session değerleri kaybolur. StateServer modunda ise session değerleri sunucuda arka planda çalışan ASP.NET state servisinde tutulur. Üçüncü mod olan SQLServer’da ise session değerleri SQL Server içerisindeki tablolarda tutulur. Cookieless özelliği ise session değişkenlerin istemcide çerez içerisinde tutulup tutulmayacağını belirler. true değerini aldığında SessionID değeri URL’ye eklenerek istemciye yollanır. Varsayılan değeri false’dir. Timeout özelliği ise az önce açıklanan session’ın dakika cinsinden yaşama süresidir.

Sessionlar çerezleri desteklemeyen tarayıcılarla çalışabilir. SQLServer’da saklandıklarında uygulamalara kalıcılık sağlarlar. Loglama gibi işlemleri kolaylaştırırlar. Ancak büyük verilerin, örneğin datasetlerin sessionlarda tutulması belleğin tükenmesine yol açar. Bu yüzden sessionların perfomansı etkilemeyecek şekilde kullanılması gerekir.

Uygulama Durumu (Application State) Sessionlar kullanıcıya özgüdür. Kullanıcıya ait değişkenler, özellikler sessionlar içerisinde saklanabilir. Kullanıcı uygulamadan çıktığında sessionlar bellekten atılabilir. Örneğin bir alışveriş sepeti içerisindeki ürünler sessionda tutulabilir. Sipariş tamamlanmazsa veya tarayıcı penceresi kapatılırsa sessionlar silinir. Bu istenen bir durumdur. Uygulama ölçeğinde değişkenler oluşturulup,kullanılmak istenildiğinde ise application nesnesi kullanılır. Application nesnesi uygulamaya özgüdür. ASP.NET uygulaması, IIS çalıştıkça application değişkenlerini kullanabilir. Tarayıcı kapatılsa dahi uygulamaya özgü değişkenler bellekte kalır. Application nesnesinin çok kullanıldığı bir durum, siteyi ziyaret edenlerin toplam sayısını öğrenmedir.

private void Page_Load(object sender, System.EventArgs e)
{
    if (Application["ziyaret"] == null )
    {
        Application["ziyaret" ] = 0;
    }
    Application.Lock();
    Application["Ziyaret"] = (int )Application["Ziyaret"] + 1;
    Application.UnLock();
    Label1.Text  = "Ziyaret Sayısı: " + Application["ziyaret"].ToString();
}
Application değişkenlerine değer atamak session değişkenlerine değer atamakla benzerdir. Ancak application nesnesine birden fazla kullanıcı değer atayabileceği için değer atama işleminin senkronize yapılması gerekir. Aynı anda iki kullanıcı application değişkeninin değerini değiştirmeye kalkarsa hata meydana gelir. Bunu önlemek için Lock() metodu kullanılarak sadece bir kullanıcının değeri değiştirmesine izin verilir. Diğer kullanıcıların istekleri ilk kullanıcının işlemi bittikten sonra teker teker ele alınır. UnLock() metodu ile application nesnesi, başka taleplere cevap verebilmesi için serbest bırakılır.

Application nesnesi uygulama bazındaki değişkenleri saklamak için çok kullanışlıdır. Bellek performansını etkilemeyecek şekilde bir çok statik veri application değişkenler içerisinde saklanabilir.

Veritabanları (Database Support) Web uygulamaları çok kullanıcılıdır. Uygulamanızda kullanıcıların bilgilerini, isteklerini saklamanız gerekebilir. Hatta uygulamanızın kendisi bile bir veritabanında depolanmış bilgilere ihtiyaç duyabilir. (Örnek: Bir haber sitesinin haber arşivi) Bu gibi durumlarda verileri depolamak için veritabanı kullanmak kaçınılmazdır.

Uygulamanızda bir veritabanı kullanarak kullanıcıları birbirinden ayırt edebilir, işinizle ilgili bilgileri depolayabilirsiniz. Veritabanı kullanmak verileri yalın dosyalarda tutmaktan çok daha güvenli ve verimlidir. Diğer yandan veritabanını optimum şekilde tasarlamak zor bir iştir. İyi tasarlanmamış bir veritabanı hem uygulamanın kodlanmasını zorlaştırır hem de performansını düşürür.

Ferhat Nutku
[email protected]

Makale:
Asp.Net' te Durum Yönetimi - 2 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