Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

ASP.NET Client-Side Durum Yönetimi

Web sayfanız binlerce kullanıcıya hitap ediyorsa, client tarafında mutlaka uygulama state’lerini saklamaya kesinlikle ihtiyaç

duyarsınız. Client tarafında veri saklamanın farklı teknikleri mevcuttur.

View State : Client tarafında veriyi hashlenmiş şekilde saklamak için kullanılır.
Aşağıdaki config değeri default olarak always’tir.
<configuration>
<system.web>
<pages viewStateEncryptionMode=”Always”/>
</system.web>
</configuration>

EnableVireState özelliği ile bir sayfadaki tüm kontrollerin viewstate’ini açıp kapatabiliriz.
ViewStateMode(Framework 4.0 ile geldi) : EnableViewState=true ise bu property devreye girer. Default olarak “Inherit”dir ve

kontrollere sayfanın viewstate’ini miras almasını sağlar.

*Örneğin bir sayfanın view state’ini disable edip,spesifik bir kontrolün viewstate’ini açmak isterseniz.

Page.EnableViewState=”True”, Page.ViewStateMode=’Disabled’, Control.EnableViewState=”True”, Control.ViewStateMode=”Enabled”

yapmanız gerekir.

*Viewstate sayfada sıkıştırılmış olarak saklanmaz. Eğer web server’ınızda GZip ile dinamik Http compression(sıkıştırma)’ını

enable ederseniz bütün sayfalarda viewstate sıkıştırılmış olacaktır. Eğer sıkıştırma işleminin bütün web sitenizde geçerli

olmasını istemiyorsanız sayfaların Page.SavePageStateToPersistenceMedium ve Page.LoadPageStateFromPersistenceMedium metodlarını

override edebilirsiniz. Bu metodlar viewstate’in serialize ve deserialize metodlarıdır.

*Bunların dışında viewstate’e custom veri de yazıp geri okuyabiliriz.
this.ViewState.Add(“MyData”, “some data value”);
string myData = (string)ViewState[“MyData”];

Control State : Spesifik bir Custom kontrolde bilgi saklamak için kullanılır. Temelde viewstate ile aynı işlevi görür. Control

state’i bir web kontrolümde kullanabilmek için OnInit metodunu override etmelisiniz. Sayfanın Page.RegisterRequiresControlState

metodunu çağırıp,kontrolü bu metoda geçirmelisiniz.

Hidden Fields : Viewstate gibi sayfa üzerinde veri saklamaya yarar ancak şifreleme,sıkıştırma, hashleme vs. özellikleri

yoktur.Bu kontrolü toolbox’tan sürükleyip sayfaya ekleyebilirsiniz.Kullanıcı arayüzünde görünmez.
Cookies : Client makinada text file olarak bazı bilgileri saklamaya yarar. Siz cookie expire time’ı ne kadar uzun verirseniz

verin kullanıcı bilgisayarındaki bütün cookie’leri silebilir.

Cookie yazma : Response.Cookies.Add(New HttpCookie(“userId”, userId))
Cookie okuma : Request.Cookies(“userId”).Value

// Check if cookie exists, and display it if it does
if (Request.Cookies[“lastVisit”] != null)
// Encode the cookie in case the cookie contains client-side script
Label1.Text = Server.HtmlEncode(Request.Cookies[“lastVisit”].Value);
else
Label1.Text = “No value defined”;

// Define the cookie for the next visit
Response.Cookies[“lastVisit”].Value = DateTime.Now.ToString();
Response.Cookies[“lastVisit”].Expires = DateTime.Now.AddDays(1);

Cookie scope’unu belirlemek için directory verilebilir.
Response.Cookies[“lastVisit”].Path = “/MyApplication”;
Cookie boyutu kullanılan browser’a bağlıdır. Her bir cookie max 4KB olabilir ve bir sitede 20 cookie olabilir.

Aşağıdaki şekilde de cookie’ler kullanılabilir.
Response.Cookies[“info”][“visit”] = DateTime.Now.ToString();
Response.Cookies[“info”][“firstName”] = “Tony”;
Response.Cookies[“info”][“border”] = “blue”;
Response.Cookies[“info”].Expires = DateTime.Now.AddDays(1);
//(visit=4/5/2006 2:35:18 PM)  (firstName=Tony)  (border=blue)

Query Strings : Requestte bulunulan sayfanın url’ine eklenen veri taşıma yöntemidir. ? işaretinden sonraki kısımda key,value

olarak yazılır.
Buradan gelen değer mutlaka kontrol edilmelidir çünkü hataya açıktır. Çoğu browser 2083 karakter sınırı vardır.
http://support.microsoft.com/Default.aspx?kbid=315233

Label1.Text = string.Format(“User: {0}, Lang: {1}, Page: {2}”,
Server.HtmlEncode(Request.QueryString[“user”]),
Server.HtmlEncode(Request.QueryString[“lang”]));

January 10, 2012 - Posted by | ASP.NET | , , , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s