Merhaba arkadaşlar geçen seferki  makalemizde rast gele sayıların nasıl oluşturulacağına değinmiştik. Şimdi bu oluşturduğumuz sayıları kullanarak web sayfalarında genellikle kullanılan güvenlik kodu uygulaması geliştirelim. Eğer resim kullanacaksak 0 dan 9 kadar rakamları resim şeklinde web sitemizin olduğu klasöre ekleyelim örneğin ana klasörümüzün altında gkod diye bir klasör

 tanımlayalım ve bu resimleri buraya ekleyelim. Tabi resimlerimizin isimleri 0.jpg 1.jpg tarzında olsun. Şimdi sayfamıza

Bir tablo ekleyip satır sayısını 1 kaçlı kod oluşturmak istiyorsak sütün sayısını da o kadar yapalım ben 4 lü oluşturacağım.

 

<table border=”0″ cellpadding=”0″ cellspacing=”0″>

        <tr>

        <td>

            <asp:Image ID=”Image1″ Height=”24px” Width=”20px” runat=”server” />

  </td>

        <td>

            <asp:Image ID=”Image2″ Height=”24px” Width=”20px” runat=”server” />

  </td>

        <td>

            <asp:Image ID=”Image3″ Height=”24px” Width=”20px” runat=”server” />

  </td>

       

  <td>

            <asp:Image ID=”Image4″ Height=”24px” Width=”20px” runat=”server” />

  </td>

  </tr>

        </table>

Efet şimdi tablomuzu oluşturduk ve resimlerimiz ekledik. Şimdi kodumuzu yazmaya başlayalım. Güvenlik kodu sayfa ilk açılırken yüklenmesi gerektiğinden dolayı kod kısmımızda pageload ksımına yazıyoruz. Ben pageload kısmının pek karışmasını şstemedğim için bu işlem için bir metod yazacağım ve işlemleri orada yaptıracağım.

 

protected void Page_Load(object sender, EventArgs e)

    {       

            gkodolustur();

       

    }

 

Burada gkoduolustur diye tanımladığım metodu çağıttırdım. Şimdi sayfam yüklenirken bu metodtaki işlemleri yapacak. Bakalım neler var bunun içinde

 

public void gkodolustur()

    {

        String uyegkod;

  int a, b, c;

        Random rnd1 = new Random();

        Random rnd2 = new Random();

        Random rnd3 = new Random();

        Random rnd4 = new Random();

        a = rnd1.Next(0,9);

        b = rnd2.Next(0,9);

        c = rnd3.Next(0, 9);

        d = rnd4.Next(0, 9);

 

    

  Image1.ImageUrl = “gkod/” + a + “.jpg”;

        Image2.ImageUrl = “gkod/” + b + “.jpg”;

        Image3.ImageUrl = “gkod/” + c + “.jpg”;

        Image4.ImageUrl = ”gkod/” + d + ”.jpg”;

        uyegkod = a.ToString() + b.ToString()+ c.ToString() + d.ToString();

 

        if (!IsPostBack)

        {

            HiddenField1.Value = uyegkod;

 

        }

   

    }

 

Şimdi işlemlerimizi sırasıya anlatalım. İşlemimizin ilk asamağı tanıdık geliyormu daha önce rast gele sayıları anlatırken kullanmıştık Random nesne için rnd adında bir değişken tanımladık kaç tane değişkenimiz varsa o kadar değişkenlerimiz tanımlıyoruz. Şimdi intiger tipinde 4 tanede değişkenimizi tanımladık ve bu değişkenlerin değerini 0,9 arasında bir değere Random nesnesi kullanarak eşitledik. Tabi ki değişkenlerimiz 0 ve 9 değerinide alabiliyorlar. Şimdi sıra resimlerimizi çağırmaya geldi resimlerimizin urlsini ilk başta 0 dan 9 kadar olan resimleri koyduğumuz klasorun ismini sonra hangi resimi çağırmak istiyosak onu değişkeni ve en sonunda resimlerimizin uzantısını çağırıyoruz. Resimlerimiz sayfamızda görüldü. Şimdi yapmamız gereken sayılarımızı birleştirip string tipinde bir değişkene atmamız. Çünki kullanıcı textbox a girerken 4 haneli olarak girecek son satırımızda 4 ayrı değişkenimizin değerini uyegkod adlı değişkenimize eşitliyoruz. En son yaptığımız olaysa kullanıcı sayfada yaptığı işlemi onaylamak için bir butona bastığında sayfaya yenileniyor ve bu yenilenme sonucunda bizim oluşturduğumuz güvenlik koduda değişiyor ama kullanıcı eski kodu yazdığından güvenlik kodları birbirleriyle eşleşmiyor. Bu sorunu çözmek için hiddenfield kullanıyoruz ve bunun değerine bizim uyegkod ta tuttuğumuz değeri aktarıyoruz. Sayfa güncellense bile hiddenfield in valuesi değişmiyor.

Peki güvenlik kodumzu nasıl kontrol ettirecez tabi ki hemen cevapladınız if koşuluyla oda şöyle basitce gösterecek olursak

 

if(guvenlikkodtxt.text==hiddenfield.value)

{

 

//Burayada yapmasını istediğimiz işlem

//ve sona hani demiştik ya sayfa yenilendiğinde

//yeni kod oluşturuluyo diye

//üst üste kayıt eklemek isteyen kullanıcı

//sayfada görülen kodu yazacaktır

//ama biz hiddenfield in valuesini ispostback le sabitlemiştik

// girdiği kod hep eski kodla karşılaştırılacağı için

//hata verecektir

//onun için yaptırmak istediğimiz işlemlerimiz bittikten sonra

//hiddenfield in value sini yeniden

//yeni üretilen uyegkod değişkenine eşitlemem lazım

//diyeliki yaptıracağım işlemler burada bitti

Hiddenfield.value=uyegkod;

//evet eşitlemede bitti artık hiddenfield sayfada görülen değere

//eşitlenmiş olduk

 

}

 

else

{

Response.write(“Girdiğiniz Güvenlik Kodu hatalı ”);

}

 

Bir sonraki makalede görüşmek üzere.

 

Update Panel  (Ajax Nedir ? )

 

      Bir önceki makalemizde ajax ‘ ın genel olarak özelliklerinden bahsetmişti. Bu yazımda sizlere Update Panel kontrolünden ve uygulamalarımızda nasıl kullanabileceğimizden bahsedeceğim.

 
      Bu kontrol sayesinde , sayfamızda bölümler oluşturabilir ve bu bölümleri asenkron bir şekilde güncelleyebiliriz. Bu sayede sayfamızı PostBack işlemine tabi tutmamış oluruz,  sayfamız hızlı çalışır ve  sunucu ile istemci arasındaki trafiğide azaltmış oluruz.
 
      Kontrol içerisinde 2 farklı kısım vardır bu bölümlerin ilki görünmesini istediğimiz içeriğin girildiği bölümdür . Bu bölüm  <ContentTemplate>İçerik</ContentTemplate> etiketleri ile sınırlanır,bu etiketler arasına  istediğimiz içeriği girebiliriz.Diğer bölüm Panelimizin tetikleyicilerini belirlediğimiz bölüm. Bu bölümde <Triggers>Tetikleyiciler</Triggers>  etiketleri ile sınırlanır. Eğer tetileyicimiz Panelimizin içerisinde iste <Triggers> bölümün belirlememize gerek yoktur, fakat tetikleyicimiz panelimizin dışında ise bu bölümde tanımlamamız gerekir. Şimdi bunları birer örnek ile açıklayalım.
 

Örnek 1: Tetikleyici Panelin İçerisinde ise

 

Deneme.aspx
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
      <asp: asp:TextBox ID="Text1" runat="server" Text=" " /><br />  
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>

Deneme.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Text1.Text;
}

 

Örnek 2: Tetikleyici Panelin Dışında ise

 

Deneme.aspx
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
      <asp: asp:TextBox ID="Text1" runat="server" Text=" " /><br />  
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>    
</ContentTemplate>
<Triggers>
         <asp:AsyncPostBackTrigger ControlID=" Button1" EventName="Click" />
   </Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Button" />

Deneme.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Text1.Text;
}

 

Örnek 3: İki tetikleyicili sistem (birisi panelin içinde diğeri dışında)

 

Deneme.aspx
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
      <asp: asp:TextBox ID="Text1" runat="server" Text=" " /><br />  
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:Button ID="Button2" runat="server" Text="Button2" />

</ContentTemplate>
<Triggers>
         <asp:AsyncPostBackTrigger ControlID=" Button2" EventName="Click" />
   </Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button2" runat="server" Text="Button2" />

Deneme.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Text1.Text;
}
protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = "Dışardaki tetikleyiciye basıldı";
}

 
      Örneklerde de gördüğümüz gibi basit bir şekilde sayfamız bölümler oluşturup atadığımız tetikleyiciler yardımı ile sadece bu bölümleri güncelleyebiliriz, bir paneli birden fazla tetikleyici ile güncelleyebiliriz. Bir sonraki makalede görüşmek üzere.
 
Tahir MUTLU
 
www.tahirmutlu.com www.bilyaz.com
 

AJAX Nedir ?

 

      AJAX terimi, Asynchronous JavaScript And XML kelimelerinin baş harflerinden türetilmiştir. Bu terim ilk kez 2005 yılında “Jesse James Garrett” tarafından kullanılmıştır.  AJAX tekniği, daha önceden zaten var olan JavaScript ve XML dillerinin, web tarayıcısında hazır bulunan XmlHttpRequest nesnesi etrafında birlikte kullanılmasından ibarettir.

 

      Tasarlamakta olduğunuz sitelerde amaçlarınızdan birisi eğer kullanıcılar sizin sitenizi ziyaret etmek zorunda değillerse (Mesela öğrencilerin notlarını kontrol için bilgi sistemlerine girmesi) , onlara hızlı hizmet sunmak istersiniz. HTML ile bunu FRAME ve IFRAME etiketleri ile çözebiliyoruz yada flash ile. AJAX ta bunların yerini aldı günümüzde. Bu sayede belirlemiş olduğunuz küçük bir bölümü sayfanız yeniden yüklemeden yenileme, güncelleme şansınız oluyor. Diğer bölümler sabit kaldığı için sisteminiz hızlı çalışıyor ve böylece ziyaretçileriniz sizi tercih edebiliyor.

 

Avantajı Nedir ?

 

      Eğer sitenizin yayımında ücretsiz bir sistemden yararlanmıyorsanız bant genişliği sizin için önemlidir. Ziyaretçi sayfayı her yüklediğinde bu genişlik değeriniz azaltacağı için belirli bir bölgeyi güncellemek sizin için bir avantaj olacaktır.

 

      Her nekadar internet günümüzde yaygın ve hızlar eskilere göre daha iyi olsada kullanıcıların bir çoğu masaüstü uygulamalara aşina olduğu için sitelerden de bu performansı bekliyorlar. Ajax ile sitenize bunu da katabilirsiniz.

 

      HTML,CSS,JavaScript gibi temel tasarım bilgilerini bildiğinizden ve Ajax bunları kapsadığından adaptasyon probleminizde olmayacaktır.

 

Kimler Kullanıyor ?

 

      Ajax tekniğini kullanan bir çok ismi aslında günlük kullandığınız en önemli isimler olarak nitelendirebiliriz. Microsoft , Google , Yahoo , Youtube , Flickr , linkutum …. gibi.

 
      Bizde planladığımız ölçüde asp.net ile ajax uygulamarı nasıl geliştrebleceğimizden ve neler yapabileceğmizden diğer makalelerimizde bahsedeceğiz. En kısa zamanda görüşmek üzere.
 
 

Tahir MUTLU

 

www.tahirmutlu.com www.bilyaz.com www.linkutum.com

Merhaba arkadaşlar.


Makalelerimize kaldığımız yerden devam ediyoruz.Bu seferki ele
alacağımız konu SUB Kullanımı.Diyelimki sayfamızın ismi sayfa.asp olacak
ve bu sayfa içinde 2 tane bölüm yapacağız.ısimleri ise icerik1, ve
icerik2 olsun.

Şimdi kaydedeceğimiz sayfa.asp ‘nin kodlarını görelim

<%
islem = request.querystring("islem")
if islem = "icerik1" then
call bolum1
elseif islem = "icerik2" then
call bolum2
elseif islem = "" then
response.write "<b>Lütfen bir bölüm seçiniz.</b><br><a href="http://sayfa.asp?islem=bolum1">Bölüm1
için tıklayın.</a><br><a href="http://sayfa.asp?islem=bolum2">Bölüm2
için tıklayın.</a>"
end if
%>
<% sub bolum1 %>
Burada icerik1 bulunmaktadır..
<% end sub %>
<% sub bolum2 %>
Burada ise icerik2 bulunmaktadır..
<% end sub %>

Evet arkadaşlar,SUB kullanarak,bir sayfada iki veya daha fazla sınıfı
oluşturmayı ve bunları linklerle çağırmayı gördük.Diğer makalelerde
görüşmek üzere.Kolay gelsin

Tüm soru ve sorunlarınız için serhat@bilyaz.com adresine mail
atabilirsiniz.

Serhat ALTINEVLEK



Merhaba arkadaşlar,

Asp makalelerimden birini sizlerle
paylaşıyorum.Bu makalemizde,sizlerle k.adı ve şifre ile giriş yapmayı
anlatacağım.Temel olarak dersimizde iki sayfa kullanacağız.Çünkü,ilk
sayfamızda form oluşturaağız ve işlem yapacağı yolu belirteceğiz,ikinci
sayfamızda ise,ilk sayfada yapılan işlemin kontrolünü 
yaptırıp,şartlar sağlandıysa sayfada mesaj yazdırsın diyeceğiz.İlk
sayfamızın kodları ve ufak açıklamalarıyla başlayalım;

default.asp


<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
/>
<title>Giri&#351;</title>
</head>
<form method="post" action="ayar.asp">
<p align="center"><font face="Tahoma"><span
style="font-size: 11pt">
<font color="#FFFFFF"><b>Kullanici Adiniz : </b>&nbsp;&nbsp; </font>
<input type="text" size="34" name="adi" /><BR><b><font
color="#FFFFFF">Kullanici Sifreniz :
</font></b><input type="password" name="FormParola"
size="33"></span></font><BR>
<input type="submit" value="Gönder" style="font-family: T" /> </p>

</form>
<body bgcolor="#FF5050">
</body>
</html>

 

Yeşil renkle belirttiğim alanda form
oluşturuyoruz,metodu olarak POST ve gideceği sayfa olarakda ikinci
sayfamız olan "ayar.asp" yazıyoruz.Mavi alanlarda ise,ilk satırda
Kullanici Adiniz: ve ikinci satırda ise type ‘ı text , name ise
"adi" olmak üzere bir metin formu,üçüncü satırda ise type ‘ı
password,name ise FormParola olan bir metin formu daha oluşturduk.Burada
kullandığımız name ler ("adi" , "FormParola") ayar.asp ‘de
verdiğimiz değişken isimleridir.Ve en sonda da Gönder butonu
oluşturuyoruz ki sayfaya gitsin.Şartlar bunlara göre işleyeceği
için,onları yazıyoruz..İlk sayfamızı default.asp olarak
kaydedin.Gelelim ikinci sayfamız olan ve asp kodlarını yazacağımız
ayar.asp
‘ye;

ayar.asp


<html>
<head>
<title>Giris ayar</title>
</head>
<%
gelenad = Request.Form("adi")
gelensifre = Request.Form("FormParola")
FormParola = ucase(trim(request.form("FormParola")))

If FormParola <> "admin" Then
Responese.Write "Bu Bilgisayar Kullanicisi Degilsiniz..Tekrar
Deneyin…"

Else
Response.Write "Bu Bilgisayarin Yöneticisi Hos Geldiniz..Sisteme
Giris Basarili"

%>
<body>
</body>
</html>
<% End If %>

 Asp taglarımızı açtık ve gelenad
‘a formdan gelecek olan "adi" ve gelensifre ‘ye formdan gelecek parolaya
atadık.Daha sonra FormParola "admin" kelimesinden farklıysa "Bu
Bilgisayar Kullanicisi Degilsiniz..Tekrar Deneyin…"
bunu , farklı
değilse Response.Write "Bu Bilgisayarin Yöneticisi Hos
Geldiniz..Sisteme Giris Basarili"
bunu yazdırsın diye bir sınama
yaptık.Asp tagımızı kapattık ve En sonda da <% End If %> ile şart
işlemini bitirdik.Bu sayfayıda ayar.asp olarak kaydedin..

Ve bunların sonucu olarak ana sayfadan
bir isim ve parola olarak "admin" girdiğinizde sisteme girmiş,aksi
halinde sisteme girmezsiniz diye mesaj alacaksınız.Gerisi size kalmış
isterseniz k.adı kontrolü de ve başarısız olursa,Response.Direct ile ana
sayfaya gönderebilirsiniz..

Tüm sorunlarınız için bilyaz.com &
serhat@bilyaz.com adresine
yazınız..Kolay gelsin

 

Session State

State management konumuzun sonuncusu ve çok başvurulan bir metod olan Session State makalemizle yine karşınızdayız.
        Hatırlayacağınız  gibi    daha önce anlattığımız Query String,View State,Cookie gibi metodların kullanım alanlarında bazı sınırlamalar mevcuttu.Peki ya bizim uygulamamızda daha spesifik ve kompleks verileri saklamamız gerekirse ne olacak veya güvenlik unsuru ön plandaysa hangi yöntemi kullanmamız gerekecek?Bir data objesini saklayıp başka bir sayfaya iletmemiz gerekirse ne yapmamız gerekecek?İşte bu durumda ASP.NET ‘in en önemli özelliklerinden biri olan Session State özelliğini kullanarak sorunumuzu gidereceğiz.
Session State  özelliğinin yönetimi ASP.NET’in dikkat  çeken yegane taraflarından biridir.Bu özellik herhangi türden bir veriyi sunucudaki hafıza üzerinde saklamamıza olanak sağlar.Bilgi kullanıcıya gönderilmediğinden ve her oturumun spesifik olması nedeniyle korunmuştur.Sunucuya erişim sağlayan her kullanıcının farklı bir oturumu ve sunucuda saklanan farklı bir oturum bilgisi mevcuttur.
ASP.NET her oturumu(session) 120-bitle kimlikler ve bu değeri yaratmak için kendine ait patentli bir algoritma kullanır.Yaratılan oturum değeri(Session_ID) her kullanıcı için tektir ve zararlı erişimcilerin ulaşıp çözemeyeceği kadar rastgele yaratılmıştır.
Uygulamanın sunulabilmesi için kullanıcının her istenildiğinde doğru oturum değeriyle erişim sağlaması gerekecektir.Bunu yapmanın 2 yolu vardır.
1-)Cookie Kullanarak: Bu yöntemde session_Id ,session collection kullanıldığında  “ASP.NET Session_ID “isimli, özel ve otomatik olarak yaratılmış bir cookie ye iletilir.Bu yöntem default olarak kullanılır ve ASP’ den gelen bir gelenektir.
2-)Özel URL kullanarak: Bu yöntemde Session_ID özel olarak yaratılmış URL ler kullanılarak iletilir.Bu yöntem ASP.NET’in yeni yaklaşımıdır böylece cookielere izin vermeyen kullanıcılar içinde session stateler kullanılabilir.
Her yöntemde olduğu gibi Session State metodunda da unutulmaması gereken bir yön vardır.Her ne kadar da küçük bir veri saklanacak olsa da çok kullanıcılı uygulamalarda çabuk altından kalkılamaycak boyutlara gelebilir.Sessionların dikkatsiz kullanımı çoklu kullanımları engelleyen en büyük sorunlardan biridir.
Session Stateler System.Web.SessionState.HttpSessionState sınıfına erişilerek kullanılabilirler.Kullanım syntaxı ViewState le aşağı yukarı aynıdır.Mesela bir dataset objesini saklamak istersek aşağıdaki gibi kodlamamız gerekir.
Session[“dsBilgi”]=dsBilgi;
ve değiştirebilmek işini de aşağıdaki şekildeki bir dönşümle yapabiliriz.
dsBilgi=(DataSet)Session[“dsBilgi”];
.Bir örnekle Session State kullanımını açıklamadan önce HttpSessionState sınıfının bazı methodlarının ne işe yaradığını açıklamadakta fayda var,zira Session State özelliğini kullanırken bu methodlara da ihtiyaç duyabilirsiniz.
Count            :Kullanılan Sessiondaki item sayısını verir.
IsCookieless:Yukarıda açıklanan Cookie metodunun mu özel URL metodunun mu kullanılacağını ayarlar.
TimeOut        :Yürürlükteki session bittikten sonra yeni bir request almadan beklenecek süreyi belirler ve programla ayarlanabilir bir özelliktir.
Abandon()     :Kullanılan session ı iptal eder ve memory de kapladığı alanı hemen siler.Bilgiler silindikten sonra hafızayı boşaltabilmek için iyi bir yöntemdir.
Clear             :Session ın içini boşalttır ama ID sini silmez.
Bir örnekle konumuzu pekiştirelim…….
 

private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
Makine birinci=new Makine(“Arçelik”,”A990 Modeli”,600);
Makine ikinci =new Makine(“Beko”,”TFG2000 Modeli”,450);
Makine ucuncu=new Makine(“Ariston”,”WQ400 Modeli”,875);

Session["Makine1"]=birinci;
Session["Makine2"]=ikinci;
Session["Makine3"]=ucuncu;

LstItems.Items.Add(birinci.ISIM);
LstItems.Items.Add(ikinci.ISIM);
LstItems.Items.Add(ucuncu.ISIM);
}                 

LblBilgi.Text=”Session_ID:  “+Session.SessionID;
LblBilgi.Text+=”<br/>Nesne Sayısı:    “+Session.Count.ToString();
LblBilgi.Text+=”<br/>Mode:  “+Session.Mode.ToString();
LblBilgi.Text+=”<br/>IsCookieless:    “+Session.IsCookieless.ToString();
LblBilgi.Text+=”<br/>Is New: “+Session.IsNewSession.ToString();
LblBilgi.Text+=”<br/>TimeOut:    “+Session.Timeout.ToString();
}  
private void Button1_Click(object sender, System.EventArgs e)
{

if(LstItems.SelectedIndex==-1)
{
LblAyrinti.Text=”Lütfen bir ürün seçiniz!”;
}
else
{
string key=”Makine”+(LstItems.SelectedIndex+1).ToString();
Makine eleman=(Makine)Session[key];
LblAyrinti.Text=”İsim:  “+eleman.ISIM;
LblAyrinti.Text+=”<br/>Model:    “+eleman.ACIKLAMA;
LblAyrinti.Text+=”<br/>Fiyat:    “+eleman.FIYAT.ToString()+” YTL”;
}

    }
}
}

 

 
Yukarıdaki örneğimiz çamaşır makinemizin isimlerini, üretici açıklamalarını ve fiyatlarını tutan bazı data nesnelerini Session da nasıl tutulacağını gösterir.
Web programcılarının düştüğü bir hatayı belirtmek gerekir.Session State metodu birkaç kullanıcılı uygulamalarda  sorunsuz çalışacak ve programcıyı mutlu edecektir fakat kullanıcı sayısı arttıkça yavaşlama ve sorunlar başlayacaktır.Çok kullanıcılı uygulamalar için uygun olan caching metodunu da ileriki zamanlarda anlatacağız.Şimdi biraz Session State ‘in web.config(.NET için Solution Explorer dan erişilebilir) dosyasından ayarlanabilir metodlarından bahsedelim.
 

<?xml version=”1.0″ encoding=”utf-8″ ?>
<configuration>
<system.web>
.
.
<sessionState
mode=”InProc”
stateConnectionString=”tcpip=127.0.0.1:42424″
sqlConnectionString=”data source=127.0.0.1_u84 ?rusted_Connection=yes”
cookieless=”UseCookies” cookieName=”ASP.NET_SessionId”
regenerateExpiredSessionId=”false”
timeout=”20″
SqlConnectionString=”tcpip=127.01.01:42424”
StateNetworkTimeOut=”100”
SqlConnectionString=”datasource=127.01.01:;IntegratedSecurity=SSPI”
SqlCommandTimeOut=”30” allowCustomSqlDatabase=”false”
CustomProvider=””
/>
</system.web>
</configuration>

 
Şimdi bahsettiğimiz özellikleri açıklayalım…

*Cookieless: Cookiless ayarını HttpcookieMode enumarationlarına göre yapabil
irsiniz.
Değerler aşağıdaki gibidir..
UseCookies: Tarayıcı cookie leri desteklemese bile cookie kullanmaya ayarlar ve sonuç olarak Session_Id değeri kaybedilir ve her requestte yeni bir değer yaratılır.
UseUri: Cookieler başka ayarlara bakılmaksızın deaktivite edilir yani kullanılmaz.Cookie yerine Session_Id url de saklanır.
UseDeviceProfile: Bu moda ASP.NET BrowserCapabilities nesnesini inceleyerek bilgisayarınızın cookieye uygun olup olmadığına karar verir fakat cookie kullanımına izin verilip verilmediğini araştırmaz.
AutoDetect: Bu modda ASP.NET bir cookie yi çalıştırmaya kalkışarak tarayıcının cookie için uygun olup olmadığına bakar ve cookiless modun çalışmasına karar verir.
*TimeOut: Bu özellik Sessionın en önemli eksikliklerinden biri için kullanılır.ASP.NET te dakikaların sunucu ve sayfa üzerindeki bilgiler için hayati önemi vardır.İdeal olarak zaman aralığı sunucunun kullanıcı programı kapattıktan sonra veriyi güncelleyecek kadar kısa ve kullanıcı session ı durdurup bilgiyi kaybetmeden devam edebileceği uzun olmalıdır.Bu değeri TimeOut özelliğiyle ayarlanabilir.
Session.Timeout=10;
*Mode: Bu ayar da session state kullanılırken hangi özel hizmetin kullanılacğına karar verir. Aşağıdaki 5 bölüm değişik session model arını belirtir.
InProc: Default değerdir.ASP.NET teki worker threadler gibi aynı işlemlerde saklanan bilgilerin en yüksek performansla getirilmesini sağlar(Dayanıklılık zaafları vardır.)
Not: Eğer birden fazla server kullanacaksanız out-of-service veya SqlServer state servislerini kullanmanız gerekir.
Off: Adından da anlaşılabileceği gibi session state ayarlarını deaktivite eder.
StateServer: Bu ayarla birlikte ASP.NET state management için Windows servislerini kullanır.Bu servis aynı web sunucusunu kullanır fakat bu ASP.NET işlemlerinin dışındadır ve ASP.NET işlemleri yeniden başlatılmak gerekirse bunlara temel seviyede güvenlik sağlar.Bu ayarlamayı kullanmak istediğinizde  SqlConnectionString için bir değer belirlemeniz gerekecek ve bu değer sizin tcp/ipadresinizle ASP.NET’in kullandığı Port adresini belirleyacaktir.Bu da StateServer ı başka bir bilgisayardan sunmanıza olanak sağlayacaktır.           
SqlServer: Bu ayarlama ASP.NET’in session bilgilerini saklamak için bir Sql vertabanı kullanmasını sağlar.Bu yöntem en esnek ve en yavaş durum saklama yöntemidir.State Management ta bu ayarlamayı yapabilmeniz için bilgisayarınızda bir Sql Server ın yüklü olması gerekir.SqlConnectionString özelliğini ayarlarken mutlaka bir data source bi ID ve de password değerlerini belirtmeniz gerekmektedir.Aslında Session veritabanlarının adı genelde ASPState dir.Bunun için veritabanının ismi SqlConnectionString de belirtilmemiştir.Eğer siz başka isimde bir veritabanı kullanmak isterseniz SqlConnectionStringe “InıtıalCatalog=Veritabananıismi” yazarak başka bir veritabanı balirleyebilirsiniz.
Custom: Custom özelliğini kullanmak isterseniz ilk önce CustomProvider özelliğini belirtmeniz gerekecektir.CustomProvider özelliği App_Code dizinindeki veya Bin dosyanızdaki derlenmiş assembly dosyanızı işaret eder.Bu özellik düşük düzey bir ayardır ve kullanımına dikkat edilmesi gereklidir.Bu ayarlama güvenlik dayanıklılık ve ölşçülebilirlik açısından önemlidir.

 
Application State:
 
Application State özelliği her kullanıcı tarafından erişilebilen global nesneler saklamamıza olnak sağlar.Application State System.Web.HttpApplicationState sınıfından türemiştir ve Session State le büyük benzerlikler gösterir.Aynı nesnelere sahiptir,bilgiyi sunucudan alır,aynı syntaxı kullanır.Application Stat ele yapılan en genel uygulama kaç tane session yaratıldığını ve  sayfanın kaç defa çağrıldığını tutan sayaç uygulamalarıdır.
 

   private void Page_Load(object sender, System.EventArgs e)
{
int say=(int)Application["SayacKur"];
say++;
Application["SayacKur"]=say;
LblSayac.Text=say.ToString();
}

 
Application State yukarıdaki yapıyla çok fazla kullanılmaz.Nedeni de aynı anda yapılan 2 farklı kullanıcı isteği ayrı ayrı sayılmaz,tek sayılır .Bu da bir requestin sayılmaması anlamına gelir.Bu sorunu önlemek için Lock() ve Unlock() metodları kullanılmalıdır.
 

private void Page_Load(object sender, System.EventArgs e)
{
Application.Lock();
int say=(int)Application["SayacKur"];
say++;
Application["SayacKur"]=say;
Application.UnLock();
LblSayac.Text=say.ToString();
}

 
   Bu metodlar kullanıldığı zaman başka kullanıcılar tarafından application koleksiyon serbest bırakılmadan sayfaya erişim sağlanamaz.Bu durum performansı inanılmaz şekilde olumsuz etkiler.
Application State konumuzla State Management konumuzu bitirmiş oluyoruz.İleriki konularımızda görüşmek üzere
2.1   Query String:

QueryString metoduyla her internet kullanıcısı günde defalarca karşı karşıya kalmaktadır.Query String metodu daha çok arama motorlarında kullanılmıştır.Örnek olarak  google ve Yahoo arama motorları verilebilir.
            Query String metodunda bilgi adından da anlaşılacağı üzere string katarlar olarak depolanmaktadır.(Örn: www.google.com/search?q=Eskişehir Osmangazi Üniversitesi) Bu metodun tercih sebebi serverda ve sayfada fazla yük yapmamasıdır.Yük olmamasına rağmen kullanımında önemli bazı kısıtlamalar mevcuttur.

 

Her internet tarayıcısı URL’sinin uzunluğunu sınırlamıştır.Bu sebepten dolayı URL’ye çok fazla bir bilgi girilemez dahası tarayıcılar arası uyumu gözetmek zorunda kalabilirsiniz.

Bu veri her kullanıcıya ve online olan herkesin ulaşımına açıktır.Bu yüzden de dış kullanıcı değiştirmek isteyebilir .Değişirse programınız bunun ne olduğunu anlayamaz ve hata oluşur. Kullanım amacı buna göre seçilmelidir

Dikkat edilmesi gereken en önemli özellikleriden biri de legal karakter içermesi gerekliliğidir.Komplex karakterler kullanılamaz.

*** Query String metodu view state gibi değildir tamamiyle erişilebilir.Bu yüzden  gizli olması gereken veriler için kullanmayın ya da şifreleyin
 

Bir örnek vermek gerekirse; düşünün ki bir e-ticeret siteniz var kullanıcınız için ürün ayrıntılarını başka bir sayfada gösteriyorsunuz.Ürünün ID sini özelliklerini Query Stringle iletelim.İlkin aşağıdaki sayfa dizaynını gerçekleştirelim.

 
 

Sayfamız ürünleri sıralamak için ListBox(LstItems) ,tüm ayrıntıyı seçebilmek için bir  CheckBox (ChckFull) ve ayrıntıyı görüntüleyebilmek için de bir butona(cmdView) sahiptir
İlk Sayfanın kodu şöyle olmalıdır.

 

public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button cmdView;
protected System.Web.UI.WebControls.ListBox LstItems;
protected System.Web.UI.WebControls.Label LblError;
protected System.Web.UI.WebControls.CheckBox ChckFull;
private string contents;

protected void Page_Load(object sender, System.EventArgs e)
{
LstItems.Items.Add("Beko TFG2000 Çamaşır Makinesi");
LstItems.Items.Add("Bosch E210 Çamaşır Makinesi");
LstItems.Items.Add("Ariston WQ400 Çamaşır Makinesi");
LstItems.Items.Add("Arçelik A990 Çamaşır Makinesi");
LstItems.Items.Add("Lesita L365 Çamaşır Makinesi");
}

            #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{   
this.cmdView.Click += new System.EventHandler(this.cmdView_Click);
this.Load += new System.EventHandler(this.Page_Load);

            }
#endregion

      private void cmdView_Click(object sender, System.EventArgs e)
{
if(LstItems.SelectedIndex==-1)
{
LblError.Text="Bir Ürün Seçmelisiniz…";
}
else
{
string url="NewPage.aspx?";
url+="Item= "+LstItems.SelectedItem.Text+"&";
url+="Mode= "+ChckFull.Checked.ToString();
Response.Redirect(url);
}
}                

}
}

 

 

Görebileceğiniz gibi Query Stringe geçerli olmayan karakter bilgileri gönderdik mesela boşluk karakteri,“Ç”harfi hepsi için ASP.NET in bir şifreleme yöntemi vardır.Boşluk için %20  ‘Ç’ karakteri için %c3%87 …..
Bilgiyi alan sayfa bu stringi sorun çıkmadan  orijinal haliyle alır

 

 

2.sayfanın oluşabilmesi için aşağıdaki kodu oluşturmak gereklidir

 

public class NewPage :System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label LblAyrıntı;
protected System.Web.UI.HtmlControls.HtmlGenericControl FONT1;
protected System.Web.UI.WebControls.Label LblInfo;

private void Page_Load(object sender, System.EventArgs e)
{
LblAyrıntı.Visible=false;
LblInfo.Text="Item"+Request.QueryString["Item"];
LblInfo.Text+="<br/>Tüm Ayrıntı:";
LblInfo.Text+=Request.QueryString["Mode"];
if(Request.QueryString["Mode"]=="true")
{LblAyrıntı.Visible=true;
}

      }
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{

InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{   
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}

 
 

2.2 Cookies:

Cookiler(Çerez) daha sonra kullanmak amacıyla veri saklamanın diğer bir basit yoludur.Cookiler, esasında kullanıcının hard diskinde oluşturulan küçük text dosyalarıdır.Bu küçük text dosyalarının saklandığı yer tarayıcınızın kurulu olduğu alana göre değişme gösterebilir.Sayfalar arası veri paylaşımı için kullanılır.Projedeki her sayfa tarafından ismi bilinmek suretiyle kolayca okunabilir ve uzun dönem bilgi saklamaya elverişlidir.Bu kadar işlevinin yanı sıra pek çok dezavantajları da vardır.Basit stringleri saklayabilir(QueryString gibi).Çok kolay erişilebilir ve okunabilir bu da ciddi bir güvenlik sorunudur.Ulaşılması istenmeyen özel bilgiler cookiede saklanmamalıdır.Cookide önemli veri saklamamanın gerekliliğinin başka bir nedeni de cookienin saklandığı yerin kullanıcı hard diski olmasıdır ,kullanıcı dosyayı herhangi bir nedenle ortadan kaldırabilir veya tarayıcısını cookie kullanımına kapatabilir.Bu da uygulamada hataya neden olur.Bütün bu nedenlerden dolayı cookieler comleks stringler, gizli bilgiler ve fazla miktar bilgiler için iyi bir yöntem değildir.
            Cookie kullanmak istiyorsanız bütün yukarıdaki durumları göz önünde bulundurmak zorundasınız ve ayarlarınızı cookilere her zaman erişilebilir mantığıyla yapmamalısınız.Bu nedenle cookieleri daha çok kullanıcının bir önceki ziyaretinde neyle ilgilendiği,kaçıncı ziyareti olduğu,kullandığı font boyutu veya e-mail adresinin ne olduğu  gibi onunla ilgili tecrübe kazanabileceğiniz bilgilere erişebilmek için kullanmak en iyi yöntem olacaktır.
            Bir cookie nesnesi oluşturmak için Request ve Response nesnelerini kullanabiliriz.Request cookieye erişimi ,Response nesnesi de cookieyi değiştirmemizi sağlar.Cookieler uygulama açıldığında yaratılır ve default olarak ömürleri tarayıcı kapanasıya kadardır ama ömürleri ayarlanabilir(Cookies.Expires).
Bütün anlattıklarımızı bir örnekle açıklamaya çalışalım.Aşağıdaki kod bir kullanıcının siteyi ziyaretinde bir cookie yaratmasını istiyor ve sayfa yenilenince kullanıcıyı tanıyor.

 

public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TxtName;
protected System.Web.UI.WebControls.Button cmdStore;
protected System.Web.UI.WebControls.Label LblBilgi;

private void Page_Load(object sender, System.EventArgs e)
{
HttpCookie cookie=Request.Cookies["Preferences"];

  if(cookie==null)//Cookie yaratılmamışsa değeri NULL’dur
{
LblBilgi.Text="<b>Hoşgeldin Ziyaretçi<b/>";
}
else
{
LblBilgi.Text="<b>Cookie Bulundu<b/><br/><br/>";
LblBilgi.Text="Hoşgeldin     "+cookie["Name"];
}

       }

private void InitializeComponent()
{
this.cmdStore.Click += new System.EventHandler(this.cmdStore_Click);
}

private void cmdStore_Click(object sender, System.EventArgs e)
{
HttpCookie cookie=Request.Cookies["Preferences"];
if(cookie==null)
{
cookie=new HttpCookie("Preferences");
}
cookie["Name"]=TxtName.Text;
cookie.Expires=DateTime.Now.AddMonths(2);//Cookie 2 ay süreyle saklanacak…
Response.Cookies.Add(cookie);

LblBilgi.Text="<b>Cookie Yaratıldı…<b/><br/><br/>";
LblBilgi.Text="Yeni Kullanıcı "+cookie["Name"];

}  
}
}

 

 

 

Yukarıdaki kodun oluşturduğu uygulama resimdeki şekildedir.Sayfayı daha önce çalıştırdığım için bilgisayarımda cookie yaratılmıştı.Siz de yarattıktan sonra manuel olarak cookieyi silin,sayfayı çalıştırın sayfadaki yazınız değişecek. 3. makalemzide görüşmek üzere…..

 

Yazıma Başlamadan önce eğer bu konu ile ilgili bir önceki makaleyi okumamış iseniz okumanızı tavsiye ederim . Çükü bu makalemde onları bildiğinizi varsayarak yazıma devam ediyorum .

Bir önceki yazımda sizlere ASP.NET 2.0 ile nasıl Web tabanlı Coğrafi Bilgi Sistemi uygulaması geliştirebileceğimizi aktarmıştım . Tabii ki bu tür uygulamalar , haritayı ekranda göstermek , yakınlaştırma ve uzaklaştırma işlemlerini gerçekleştirmek ile bitmiyor  . Elde etmiş olduğumuz sistem üzerinde bazı ek işlemler yapmamız gerekiyor .  Bu işlemlerden bazlarını sıralayacak olursam : Çizgi çizdirme , belirli bir noktayı işaretleme gibi . Bu yazımda sizlere , biraz önce sıralamış olduklarımı aktarıyor olacağım .

İlk olarak haritamız üzerinde istediğimiz bir noktaya nasıl bir nokta yada bir resim ile belirleyebiliriz . Bu ve bundan sonra vereceğim örneklerde haritamızı oluşturmuş olduğumuzu göz önünde bulundurarak mevcut sistemimiz üzerine eklemeler yaparak devam edeceğim . 

   

// sistem üzerinde ekleme yapacağımız noktaları bu değişkene aktaracağız
static SharpMap.Geometries.GeometryCollection kol = new SharpMap.Geometries.GeometryCollection(); //
protected void imgHarita_Click(object sender, ImageClickEventArgs e)
{
SharpMap.Geometries.Point belirlenenNokta = new SharpMap.Geometries.Point(29, 37.7);
//burada istersek fare ile işaretlenen noktayıda aldırabiliriz

        kol.Collection.Add(belirlenenNokta);
SharpMap.Geometries.LineString yeni = new SharpMap.Geometries.LineString();

            SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(belirlenenNokta);

            katmanBel.Style.Symbol = new Bitmap(@"D:\gisUygulama\App_Data\ikon.png");

            harita.Layers.Add(katmanBel);
haritaOlustur();

}

 
Yukarıdaki kod blok`u sayesinde haritamız üzerinde bir yeri ikon.png resmi ile aşağıdaki resimde gördüğümüz şekli ile  işaretlemiş olduk .
 

 

Eğer birden fazla noktayı aynı anda belirlemek istiyor iseniz ilk örneğimizdeki kodu aşağıdaki gibi değiştirmeliyiz .

 

SharpMap.Geometries.Point belirlenenNokta = new SharpMap.Geometries.Point(29, 37.7);
SharpMap.Geometries.Point belirlenenNokta1 = new SharpMap.Geometries.Point(30, 39);
//burada istersek fare ile işaretlenen noktayıda aldırabiliriz

        kol.Collection.Add(belirlenenNokta);
kol.Collection.Add(belirlenenNokta1);

        if (kol.Collection.Count < 2)
{

            SharpMap.Geometries.LineString yeni = new SharpMap.Geometries.LineString();

            SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(belirlenenNokta);

            katmanBel.Style.Symbol = new Bitmap(@"D:\tahir\sharpmap2\App_Data\icon.png");

            harita.Layers.Add(katmanBel);
haritaOlustur();

        }
else
{
for (int i = 0; i < kol.Collection.Count; i++)
{
kol.Collection.Add(belirlenenNokta);
}
SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(kol);
katmanBel.Style.Symbol = new System.Drawing.Bitmap(@"D:\tahir\sharpmap2\App_Data\icon.png");
harita.Layers.Add(katmanBel);
haritaOlustur();

      
}

 

Vermiş olduğumuz noktaları bir işaretçi yardımı ile belirledikten sonra , şimdide belirleyeceğimiz iki nokta arasında nasıl bir yol çizdirebiliriz .  Bunun için sayfama tetikleyici olarak bir adat buton ekledikten sonra , bu botunun tıklanma olayına aşağıdaki kodu ekleyelim .

 

protected void btnCiz_Click(object sender, EventArgs e)
{
SharpMap.Geometries.LineString yeniCizgi = new SharpMap.Geometries.LineString();

        //yolumuzun geçeceği noktaları yeniCizgi ye ekliyoruz
yeniCizgi.Vertices.Add(new SharpMap.Geometries.Point(29, 37.7));
yeniCizgi.Vertices.Add(new SharpMap.Geometries.Point(30, 39));

SharpMap.Layers.VectorLayer katmanVek = new SharpMap.Layers.VectorLayer("katmanVektör");
katmanVek.DataSource = new SharpMap.Data.Providers.GeometryProvider(yeniCizgi);

        //Oluşturacağımız yolun özelliklerini belirliyoruz
katmanVek.Style.Line = new Pen(Color.Red, 2);
katmanVek.SRID = 4326;
harita.Layers.Add(katmanVek);
haritaOlustur();

  
}

 

 

Ve uygulamamıza bu kodu ekledikten sonra çalıştırdığımızda aşağıdaki gibi bir görünüm elde etmiş oluyoruz . Burada bir sıkıntı yaşamış olabiliriz buda , yolu çizdirdikten sonra eğer haritamızı yakınlaştırır isek yol kaybolacaktır  çünkü her yakınlaştırmada yol haritaOlustur(); fonksiyonu ile yeniden oluşturulmaktadır . Bunu da sizlerle paylaşacak olduğum 3. örnekte belirlemiş olduğumuz bir alanı yakınlaştırma ile çözüyor olacağız . Tabi sadece tek çözüm de bu değil .

 

 
Bu yazımda sizlerle paylaşacak olduğum son örnek ise belirlemiş olduğumuz bir alanı ekrana yaklaştırma örneği olacak . Bu örneğimizde yakınlaştırmak istediğimiz alan için kuzey-güney ve doğu batı sınırlarını belirlememiz yeterli oluyor .
 

protected void btnCiz_Click(object sender, EventArgs e)
{

//Yakınlaştırmak istediğimiz alanın koordinatlarını belirliyoruz
SharpMap.Geometries.BoundingBox yakinAlan = new SharpMap.Geometries.BoundingBox(new SharpMap.Geometries.Point(26, 36), new SharpMap.Geometries.Point(42, 45));
harita.ZoomToBox(yakinAlan);
haritaOlustur();

}

 

Bu yazımda sizlerle paylaşacak olduğum son örnek ise belirlemiş olduğumuz bir alanı ekrana yaklaştırma örneği olacak . Bu örneğimizde yakınlaştırmak istediğimiz alan için kuzey-güney ve doğu batı sınırlarını belirlememiz yeterli oluyor .

 

Eğer 2. ve 3. örneklerimizdeki kodları birleştirir isek , 2. örnekte yaşamış olduğumuz problemi çözmüş oluruz .

Bu ve bir önceki yazımda ASP:NET ile GIS uygulamaları  üzerine sizlere temelden başlayarak bu tür uygulamalar nasıl geliştirebileceğinizi aktarmaya çalıştım . Yaşayacağınız problemlere benimle iletişime geçebilirsiniz . Tekrar görüşmek üzere .

 
 

 

Kaynak :
http://www.codeplex.com/SharpMap

 

Bilişim ve yazılım dünyasına öncü kaynaklardan biri haline getirmek istediğimiz sitemizde ilk makalemize asp.net bölümünde state management serisiyle başlıyoruz.
State management konusuna girmeden önce bir şeyi belirtmek sanırım yararlı olacaktır.Kullanıcı ile etkileşim halindeki bir web sitesi hazırlamanın temel şartlarından biri kullanıcının anlık bilgilerini (hangi sayfadan geldiği,kaçıncı kez geldiği,yönlendirilmiş olup olmadığı vs…)  request hızını da göz önüne alarak saklayabilmektir.Bu  işlem klasik bir  windows uygulamasında hafıza da yeterli olduğundan otomatik olarak yapılır.Sürekli çalışan bir masaüstü uygulamasında hafızadan özel bir bölge programın kullanması için ayrılmıştır.Profesyonal bir Asp.net web uygulaması da bu şekilde görülse de aslında olay biraz farklı işler.Web sayfanızı, servera bağlanarak istersiniz ve o size post edilir bu adımdan sonra sayfanın çalışması durmuştur eğer bundan sonra kullanıcı bilgilerini saklamak ve kullanmak istiyorsanız kullanabileceğiniz bazı yöntemler mevcuttur:

    View State
    Session State
    Application State
View State :

View State kontrolü kendisine verilen bilgiyi gizli bir alanda tutar.Bu bilgi hafızaya Base64 formatında bir karakter dizisi olarak yazılır ve her geri postalamada(postback) sunucuya getirilir ancak viewstate özelliği sunucu kontrolleriyle sınırlıdır.Yüklenen bilgi ya sizin tarafınızdan oluşturlan bir custom object veya basit bir bilgi türü olmak zorundadır.
Sayfadaki viewstate özelliği view state koleksiyonuyla işlem yapılmasını sağlar.Bu özellik SatteBag classının bir instancedır.Bu classa herhangi bir şey eklemek veya çıkarmak istediğinizde belli bir syntax kullanmanız gerekmektedir.

 

//this anahtar sözcüğü görüntülenen sayfanın nesnesine başvurur.
this.viewstate[“sayac”]=1;
int Sayac;
Sayac=this.ViewState["sayac"];
LblGoster.Text=Sayac.ToString();   //Sonuç 1 olarak görünecektir

 

yukarıdaki kodu yazdığımızda belirlenmiş olan sayactır.Eğer daha önce sayac isminde bir öğe yoksa bu kaydedilir varsa da yenisi üstüne yazılır.Alınan değeri bir yerde kullanmanız gerekiyorsa değerin türünü belirtmeniz gerekmektedir.Çünkü view state collection alınan değeri generic(markasız,türsüz) tutar.

 

int Sayac;//int türünde değişken yaratılır
Sayac=(int)this.ViewState[“sayac”];// int türündeki değer atanır

 

Yukarıda da belirtildiği gibi viewstate özelleğinin tuttuğu değer alenen görülebilecek şekilde dizayn edilmiştir.Hiçbir şekilde şifreleme veya daha başka bir işlem uygulan-
mamıştır.Sisteminize sızmak istiyen art niyetli kişilerin eriişmine açıktır.Bunu önlemek
sistem güvenliği açısından bir mecburiyet olduğuna göre önlem 2 şekilde alınabilir
1-)Viewstate değerinin hash code olmasını sağlayarak yapılması;
Asp.net viewstate değerini alarak daha önceden belirlenmiş gizli bir key value sayesinde  karıştırma algoritmasına tabii tutar.Algoritma kısa bir bilgi katarı oluşturur ve bu bölüm değerin sonuna eklenir ve sayfa ne zaman geri postalanırsa Asp.net bu bilgiyi alır ve yeniden hesaplayarak viewstate de saklanan değerle aynı olup olmadığına bakar değer aynı değilse işlem sona erer.Asp.net bilginin tamamını istemciye yollamayı reddeder.Bu bilgiyi hash etme aslında Asp.netin default olarak gerçekleştirdiği bir işlemdir .Programcı tarafından gerekli görülmezse atlanabilir.(Yeni Serverlarda çıkan problemlerden kaçınmak için)
İptal işlemi web.config dosyasındaki enableViewStateMac=”False” denilerek yapılabilir.
2-)Sorun birden çok serverda da aynı gizli key value değeri kullanılarak aşılabilir (Bu konu detaylı şekilde işlenmesi gerekliliğinden dolayı başka bir makale konusu olarak görülmüştür.)
Aşağıdaki örnekle konuyu bitiriyoruz.

 

a

 

public partial class _Default : System.Web.UI.Page
{
private string icerik;
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)//Sayfanın geri yüklenen olup olmadığını kontrol eder
{
icerik = (string)ViewState["icerik"];
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
ViewState["icerik"] = icerik;
}

    protected void CmdKaydet_Click(object sender, EventArgs e)
{
//TextBoxa yazılan değeri üye değişkene atayalım
icerik = TxtGoster.Text;
//İçeriğin saklandığının anlaşılması için TextBox içeriğini temizleyelim
TxtGoster.Text = "";
}
protected void CmdBaglan_Click(object sender, EventArgs e)
{
TxtGoster.Text = icerik;
}
}

 

Bir bilgiyi web sitesinde saklarken masaüstü uygulamalardaki kadar belleğe sahip olmadığımızdan dolayı gerekli olmayan hiçbir şeyi tutmamaya gayret göstermek gereklidir.Çok büyük bilgilerin saklanması gönderilen son sayfanın gereksiz bilgilerle şişmesine ve  performans azalmasına  neden olacaktır .Bir dahaki makalede session state konusunda görüşmek üzere………

 
 
 
© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha