Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > asp.net: sunucu ve istemci bazli saklama viewstate kullanan var mi?
Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
26.06.2007-10:56 #23676
arkadaslar,

sadece istemci bazli degil hem sunucu hem istemci bazli bir saklama islemi yapmak istiyorum. kucuk bir ornek vereyim 1. kullanici bir sayfayi acti deger 1, baska bir kullanici o ayni sayfayi deger 2 olacak. 1. kullanici o sayfayi acinca deger 3 olacak vs. (yani 2 olmayacak, boyle olsa hiddenfield yeterli olurdu) .

viewstate ya da session aklima geldi ama kesin bir sey bulamadim session ve viewstate arasindaki fark hakkinda. arastirmaya devam edecegim. yine de yardimlarinizi bekliyorum.

ilginize simdiden tesekkurler.





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.06.2007-12:48 #23681
Merhaba oncelikle dogru anlamısmıyım bunu belirteyim:

Siz hangi sayfanin kac kere ziyaret edildigi bilgisini mi saklamaya calisiyorsunuz? Yani verdiginiz ornekte, sırasıyla 1. kullanıcı, 2. kullanıcı, sonra tekrar 1. kullanıcı 1 numaralı sayfayı ziyaret ederek bu sayfaya atanmis degeri 3 e cıkardılar. Her sayfa icin bu sekilde bir deger mi saklamak istiyorsunuz.

Oncelikle bu ve benzeri degerleri saklamak icin en guvenli yol veritabanıdır. ne viewstate ne de session dır. Ama siz hızlı olması acısından farklı bir yol arıyorsanız bence sizin icin cozum session veya viewstate degil. Application nesnesidir.

Simdi session ve viewstate sudur:

.NET uzerinde bir sayfa ASP.NET kontrolleri barindırır. Siz bu sayfayı kulanıcıya gonderdiginizde onun bilgisayarında IE, Mozilla, Opera gibi farklı tipte tarayıcılar vardır ve bu tarayıcılar ASP.NET kontollerini tanımazlar. Dolayısıyla bu kontrollerin gonderim isleminden once HTML kontrollerine Render edilmesi (dönüştürülmesi) gerekmekte ve ornegin datagrid HTML table turune donusmekte, gerekli javascript kodları da otomatik olarak yazılarak kullanıcıya post edilmektedir. Ancak bazı kontrollerin içeriğinin bilinmesi gerekmektedir.Örneğin sizin yazdığınız uygulamada bir textbox var ve bunun iceriğinde bir değiiklik olup olmadıgı sizin icin cok onemli. Mesela bos gonderdiniz dolu mu geri geldi sorusu (kullanıcı kaydında gerekli alanların doldurulması gibi). Bu durumda viewstate dedigimiz bir alanda kullanıcıya serverdan giden sayfanın icine gomulur. bu alan sifrelenmis garip karakterler icerir. Bu sifreli bilgiler kullanıcıya gonderilen textboxların, datagridlerin vs. vs. kullanıcıya gonderildikleri zamanki icerigini saklar. Ornegin Textbox1 de kullanıcıya gonderildiginde TARIK yazıyordu. kullanıcı bu TARIK kelimesini uzattı ve YAKUP TARIK yaptı diyelim. Ancak siz her kullanıcının bir onceki sayfasında neler oldugunu server da tutmazsınız, bu gereksizdir ve buyuk yer ve performans kaybıdır. Naparsınız viewstate alanının icinde textBox1 icinde TARIK yazmaktadir bilgisini sifreleyip, HTML icine gomer kullanıcıya gonderirsiniz. sonra kullanıcı bunu YAKUP TARIK yapıp size geri gonderdiginde ona gonderirken gomdugunuz viewstate te geri gelir. ASP.NET sunucusu viewstate i cozer textbıox1 benden kullanıcıya gittiginde icinde TARIK yazıyormus, bana geri geldiginde ise YAKUP TARIK yazıyor. Demekki burda bir degisiklik olmus, TextBox_Changed eventinin (olayını) tetiklemem gerekiyor der.

Siz bu durumda sayfa ziyaret bilgisini viewstate de saklamamalısınız. Cunku aynı anda her kullanıcı icin farklı bir viewstate vardır. Ancak sizin icin tekil bir sayfa ziyaret bilgisi olması gerekmektedir. Ek bir bilgi daha vereyim, viewstate bilgisinin şifreli olarak tutulması güvenlik açısından bir önem taşımamaktadır, sadece sıkıştırma sağlayıp daha küçük boyutlu veri transferi sağlamak amacı taşımaktadır.

Session nesnesi ise, su sekilde calısır. Kullanıcı bir sekilde username - password ikilisi ile sisteme giris yaptıgında siz session start verirsiniz. Bu sayede o kullanıcıya ait bir takım bilgiler server uzerinde belirli bir zaman degeri(ornegin 20 dk bunu siz belirleyebiliyorsunuz) ya da kullanıcı çıkış yapana kadar saklanır. Örneğin her sayfa için o kullanıcının T.C kimlik nosuna ihtiyacınız var. Her farklı sayfaya girişte gidip database den bu bilgiyi cekmek yerine kullanıcı sisteme giris yapar yapmaz bir kere cekip o kullanıcının session nesnesine bu bilgiyi depo edersiniz oturumu kapanana kadar tum sayfalardan sessiona erisebilir ve bir daha her sayfa icin DB ye geri gitmezsiniz. Ancak her bilgi de sessionda saklanmamalıdır, gereksiz yer ve performans kaybına neden olabilir. Siz gene kullanıcıların ziyaret ettigi sayfaların toplam ziyaret bilgilerini sessionda saklamamalısınız cunku bu da tum kullanıcılar icin ortak bir alan degildir. Sisteme bir t anında giriş yapan her kullanıcı için ayrı bir session açılmaktadır.

Sizin icin uygun olan Application nesnesidir. Bu da şu anlama gelmektedir. Sistem herhangi bir user tarafından ziyaret edilmezken idle durumdadır ve ASP.NET sunucusu Application ı yani sizin uygulamanızı durdurabilir. Yeni bir kullanıcı geldiginde ona oturum acılmadan önce sunucu sizin uygulamanızı start eder. Application Start çalıştırılır. Bu alan uygulama tüm kullanıcılar gidip sistem belirli bir süre idle (boş) kalana kadar belirli bilgileri tüm kullanıcılar için saklamak üzere görev yapmaktadır. İşte siz sayfa ziyaret bilgilerini burda tutabilirsiniz. Ancak şu da bir gerçekki tekrar ediyorum ben DB de tutardım. Application tüm kullanıcılar gittikten sonra kapanabilir bu durumda da bir kapanma eventi tetiklenir. Siz bu kapanma eventi içinde sayfa bilgilerini mutlaka kalıcı olarak bir yere yazmalısınız. Ornegin DB ye. Sonra aradan 2 saat gecti yeni bir kullanıcı geldi, eski ziyaret bilgilerinin üzerinden bir arttırma yoluna gitmeniz gerekiyor ve o bilgiler application kapalı oldugundan DB uzerinde. Application Start eventi icinde hemen DB den bu bilgileri Application nesnesine cekip, burada arttırma yaparsınız, application kapanırken gene gidip database e yazarsınız.

Olay bu sekilde, biraz makale tarzı oldu:) Orhan artık alıp bunu makaleler bolumune koyar.
Internette, viewstate, session, hidden variables, application gibi nesneler için detaylı çok fazla bilgi bulabilirsiniz.

Kolay gelsin.







Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
26.06.2007-13:05 #23682
aslinda yapmak istedigim veritabanindan reklamlarin sirali sekilde gelmesiydi. veri tabani islemlerinden kurtulabilmek icin boyle bir yol bulmaya calismistim, cunku applicationda tutacagim bilgi sadece reklam secmede parametre olarak kullaniliyor.

sanirim isimi görmeyecek ama anlattiklarinizin cok faydasi oldu, gercekten makaleler bolumune koyabiliriz. tesekkurler.





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
tarikkranda


avatar

Kayıt: 07.01.2006
26.06.2007-23:12 #23729
sevecen yazdi
 
aslinda yapmak istedigim veritabanindan reklamlarin sirali sekilde gelmesiydi. veri tabani islemlerinden kurtulabilmek icin boyle bir yol bulmaya calismistim, cunku applicationda tutacagim bilgi sadece reklam secmede parametre olarak kullaniliyor.

sanirim isimi görmeyecek ama anlattiklarinizin cok faydasi oldu, gercekten makaleler bolumune koyabiliriz. tesekkurler.


Tekrar merhaba,
acaba AdRotator kontrolunu incelediniz mi? Gectigimiz gunlerde web de dolaşırken Uğur Umutoğlu arkadaşımızın yazdığı bir makaleye rastladım. Hoşuma gitmişti acaba sizin işinize yarar mı bir incelemenizi tavsiye ederim.

http://www.msakademik.net/makaleler_detay.aspx?id=761

Kolay Gelsin.





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
27.06.2007-11:17 #23749
tesekkur ederim inceledim. hem sabit reklam hem de sirali random reklam gelecegi icin ilaveler yapmak gerek ama super bir seymis gercekten. tabii bir de flashli reklamlari unutmamak gerek.

cok tesekkur ederim ilginize.





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb