<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP &#187; Omer Baris KARAER</title>
	<atom:link href="http://www.bilyaz.com/index.php/author/omer-baris-karaer/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilyaz.com</link>
	<description>bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP</description>
	<lastBuildDate>Sun, 29 Apr 2012 22:04:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to Kill A Thread(Bir Thread&#8217;in Ölümü)</title>
		<link>http://www.bilyaz.com/index.php/how-to-kill-a-threadbir-threadin-olumu.html/</link>
		<comments>http://www.bilyaz.com/index.php/how-to-kill-a-threadbir-threadin-olumu.html/#comments</comments>
		<pubDate>Wed, 12 May 2010 14:10:19 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Kill A Thread]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=1087</guid>
		<description><![CDATA[Başlığı görenler küçümseyebilir ama yapılan büyük bir hata var.Eğer kodunuzda çok fazla cross thread call işlemi yapıyorsak ve herhangi bir threadi belli bir işlemi bitirdikten sonra öldürmek istiyorsak aşağıdaki gibi yapabiliriz &#8230;.. ?View Code CSHARPpublic class Class1 &#123; static void Main&#40;&#41; &#123; &#160; public bool ThreadCycle &#160; Thread worker=new Thread&#40;DoWork&#41;; &#160; worker.start&#40;&#41;; &#160; &#125; &#160; <a href='http://www.bilyaz.com/index.php/how-to-kill-a-threadbir-threadin-olumu.html/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Fhow-to-kill-a-threadbir-threadin-olumu.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/how-to-kill-a-threadbir-threadin-olumu.html/"></a></div><p>Başlığı görenler küçümseyebilir ama yapılan büyük bir hata var.Eğer kodunuzda çok fazla cross thread call işlemi yapıyorsak ve herhangi bir threadi belli bir işlemi bitirdikten sonra öldürmek istiyorsak aşağıdaki gibi yapabiliriz</p>
<p>&#8230;..</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1087code3'); return false;">View Code</a> CSHARP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10873"><td class="code" id="p1087code3"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Class1
<span style="color: #008000;">&#123;</span>
<span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> Main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">bool</span> ThreadCycle
&nbsp;
Thread worker<span style="color: #008000;">=</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Thread<span style="color: #008000;">&#40;</span>DoWork<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
worker<span style="color: #008000;">.</span><span style="color: #0000FF;">start</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">void</span> DoWork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
&nbsp;
<span style="color: #008000;">&#123;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>ThreadCycle<span style="color: #008000;">&#41;</span>
&nbsp;
<span style="color: #008000;">&#123;</span>
&nbsp;
Xwork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
Ywork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
zWork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">........</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
worker<span style="color: #008000;">.</span><span style="color: #0000FF;">Join</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><span style="color: #008080; font-style: italic;">//threadi işlemlerini bitiresiye kadar beklet....</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>worker<span style="color: #008000;">.</span><span style="color: #0000FF;">isAlive</span><span style="color: #008000;">&#41;</span>
&nbsp;
worker<span style="color: #008000;">.</span><span style="color: #0000FF;">Abort</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<div><span style="font-size: x-small;"> Evet işlemi gerçekleştirdik ,ThreadCycle değişkeniyle oynadık ,programımızı kapatmak istiyoruz veya threadi bitirmek istiyoruz Abort() metodunu çağırdık ve thread öldü&#8230;.. mü acaba.Bu işlemle threadin ölüp ölmediginden emin olamazsınız.Bunun yerine yapılması gereken Thread.Abort() metodunun fırlatmış oldugu exception dan yararlanmaktır.ThreadAbortException Abort() metodu çağrıldığı anda fırlatılır.Kodumuzu şu şekilde revize edersek istediğimiz elde etmiş olacağız</span></div>
<div><span style="font-size: x-small;">Yanii</span></div>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1087code4'); return false;">View Code</a> CSHARP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10874"><td class="code" id="p1087code4"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">try</span>
&nbsp;
<span style="color: #008000;">&#123;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">while</span><span style="color: #008000;">&#40;</span>ThreadCycle<span style="color: #008000;">&#41;</span>
&nbsp;
<span style="color: #008000;">&#123;</span>
&nbsp;
DoWork<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;.....</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">catch</span><span style="color: #008000;">&#40;</span>ThreadAbortException e<span style="color: #008000;">&#41;</span>
&nbsp;
<span style="color: #008000;">&#123;</span>
&nbsp;
MessageBox<span style="color: #008000;">.</span><span style="color: #0000FF;">Show</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Thread öldü...&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>herkese kolay gelsin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/how-to-kill-a-threadbir-threadin-olumu.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linq ile XML oluşturma</title>
		<link>http://www.bilyaz.com/index.php/linq-ile-xml-olusturma.html/</link>
		<comments>http://www.bilyaz.com/index.php/linq-ile-xml-olusturma.html/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 18:31:40 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[Kısa Bilgi]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[XElement]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=1070</guid>
		<description><![CDATA[[c#] ?View Code CSXElement Site = new XElement(&#34;Sites&#34;, &#160; from site in sites &#160; orderby site.Id //descending &#160; select new XElement(&#34;Site&#34;, &#160; new XAttribute(&#34;Name&#34;, site.Name), &#160; new XAttribute(&#34;Id&#34;, site.Id), &#160; new XAttribute(&#34;Address&#34;, site.Address))); &#160; XDocument xdoc = new XDocument(); &#160; xdoc.Add(Site); &#160; xdoc.Save( &#34;bilyaz.xml&#34;);]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Flinq-ile-xml-olusturma.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/linq-ile-xml-olusturma.html/"></a></div><p>[c#]</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1070code6'); return false;">View Code</a> CS</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10706"><td class="code" id="p1070code6"><pre class="cs" style="font-family:monospace;">XElement Site = new XElement(&quot;Sites&quot;, 
&nbsp;
from site in sites 
&nbsp;
orderby site.Id //descending 
&nbsp;
select new XElement(&quot;Site&quot;, 
&nbsp;
new XAttribute(&quot;Name&quot;, site.Name), 
&nbsp;
new XAttribute(&quot;Id&quot;, site.Id), 
&nbsp;
new XAttribute(&quot;Address&quot;, site.Address))); 
&nbsp;
XDocument xdoc = new XDocument(); 
&nbsp;
xdoc.Add(Site);
&nbsp;
xdoc.Save(
&quot;bilyaz.xml&quot;);</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/linq-ile-xml-olusturma.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State Management &#8211; 3</title>
		<link>http://www.bilyaz.com/index.php/state-management-3.html/</link>
		<comments>http://www.bilyaz.com/index.php/state-management-3.html/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 23:15:12 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Cookie]]></category>
		<category><![CDATA[Session]]></category>
		<category><![CDATA[State Management]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=48</guid>
		<description><![CDATA[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 <a href='http://www.bilyaz.com/index.php/state-management-3.html/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Fstate-management-3.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/state-management-3.html/"></a></div><table border="0" cellspacing="0" cellpadding="0" width="98%" align="center">
<tbody></tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="96%" align="center">
<tbody>
<tr>
<td class="metin" bgcolor="#ffffff">
<table border="0" cellspacing="0" cellpadding="0" width="96%" align="center">
<tbody>
<tr>
<td class="baslik">
<p align="center"><strong>Session State</strong></p>
</td>
</tr>
<tr>
<td height="87">State management konumuzun sonuncusu ve çok başvurulan bir metod olan Session State makalemizle yine karşınızdayız.<br />
        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.<br />
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.<br />
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.<br />
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.<br />
<strong class="ictblBaslik">1-)Cookie Kullanarak: </strong>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.<br />
<strong class="ictblBaslik">2-)Özel URL kullanarak: </strong>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.<br />
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.<br />
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.<br />
<span class="icBaslik">Session[“dsBilgi”]=dsBilgi;</span><br />
ve değiştirebilmek işini de aşağıdaki şekildeki bir dönşümle yapabiliriz.<br />
<span class="icBaslik">dsBilgi=(DataSet)Session[“dsBilgi”];</span><br />
.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.<br />
<strong class="ictblBaslik">Count            :</strong>Kullanılan Sessiondaki item sayısını verir.<br />
<strong class="ictblBaslik">IsCookieless:</strong>Yukarıda açıklanan <span style="text-decoration: underline;">Cookie </span>metodunun mu <span style="text-decoration: underline;">özel URL</span> metodunun mu kullanılacağını ayarlar.<br />
<strong class="ictblBaslik">TimeOut        :</strong>Yürürlükteki session bittikten sonra yeni bir request almadan beklenecek süreyi belirler ve programla ayarlanabilir bir özelliktir.<br />
<strong class="ictblBaslik">Abandon()     :</strong>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.<br />
<strong class="ictblBaslik">Clear             :</strong>Session ın içini boşalttır ama ID sini silmez.<br />
<strong>Bir örnekle konumuzu pekiştirelim&#8230;&#8230;.</strong></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td height="48">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td width="614" height="751" valign="top" bgcolor="#f8f8f8">
<p class="style7">private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
if(!this.IsPostBack)<br />
{<br />
Makine birinci=new Makine(&#8220;Arçelik&#8221;,&#8221;A990 Modeli&#8221;,600);<br />
Makine ikinci =new Makine(&#8220;Beko&#8221;,&#8221;TFG2000 Modeli&#8221;,450);<br />
Makine ucuncu=new Makine(&#8220;Ariston&#8221;,&#8221;WQ400 Modeli&#8221;,875);</p>
<p>Session["Makine1"]=birinci;<br />
Session["Makine2"]=ikinci;<br />
Session["Makine3"]=ucuncu;</p>
<p class="style7">LstItems.Items.Add(birinci.ISIM);<br />
LstItems.Items.Add(ikinci.ISIM);<br />
LstItems.Items.Add(ucuncu.ISIM);<br />
}                 </p>
<p>LblBilgi.Text=&#8221;Session_ID:  &#8220;+Session.SessionID;<br />
LblBilgi.Text+=&#8221;&lt;br/&gt;Nesne Sayısı:    &#8220;+Session.Count.ToString();<br />
LblBilgi.Text+=&#8221;&lt;br/&gt;Mode:  &#8220;+Session.Mode.ToString();<br />
LblBilgi.Text+=&#8221;&lt;br/&gt;IsCookieless:    &#8220;+Session.IsCookieless.ToString();<br />
LblBilgi.Text+=&#8221;&lt;br/&gt;Is New: &#8220;+Session.IsNewSession.ToString();<br />
LblBilgi.Text+=&#8221;&lt;br/&gt;TimeOut:    &#8220;+Session.Timeout.ToString();<br />
}  <br />
private void Button1_Click(object sender, System.EventArgs e)<br />
{</p>
<p class="style7">if(LstItems.SelectedIndex==-1)<br />
{<br />
LblAyrinti.Text=&#8221;Lütfen bir ürün seçiniz!&#8221;;<br />
}<br />
else<br />
{<br />
string key=&#8221;Makine&#8221;+(LstItems.SelectedIndex+1).ToString();<br />
Makine eleman=(Makine)Session[key];<br />
LblAyrinti.Text=&#8221;İsim:  &#8220;+eleman.ISIM;<br />
LblAyrinti.Text+=&#8221;&lt;br/&gt;Model:    &#8220;+eleman.ACIKLAMA;<br />
LblAyrinti.Text+=&#8221;&lt;br/&gt;Fiyat:    &#8220;+eleman.FIYAT.ToString()+&#8221; YTL&#8221;;<br />
}</p>
<p class="style7">    }<br />
}<br />
}</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td class="metin">
<p align="center"><img src="images/makale/ok/sm3.jpg" alt="" width="600" height="470" /></p>
</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin" height="78">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.<br />
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.</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td width="614" height="329" valign="top" bgcolor="#f8f8f8">
<p class="style7">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;<br />
&lt;configuration&gt;<br />
&lt;system.web&gt;<br />
.<br />
.<br />
&lt;sessionState<br />
mode=&#8221;InProc&#8221;<br />
stateConnectionString=&#8221;tcpip=127.0.0.1:42424&#8243;<br />
sqlConnectionString=&#8221;data source=127.0.0.1_u84 ?rusted_Connection=yes&#8221;<br />
cookieless=&#8221;UseCookies&#8221; cookieName=”ASP.NET_SessionId”<br />
regenerateExpiredSessionId=”false”<br />
timeout=&#8221;20&#8243;<br />
SqlConnectionString=”tcpip=127.01.01:42424”<br />
StateNetworkTimeOut=”100”<br />
SqlConnectionString=”datasource=127.01.01:;IntegratedSecurity=SSPI”<br />
SqlCommandTimeOut=”30” allowCustomSqlDatabase=”false”<br />
CustomProvider=””<br />
/&gt;<br />
&lt;/system.web&gt;<br />
&lt;/configuration&gt;</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">Şimdi bahsettiğimiz özellikleri açıklayalım…</p>
<p><strong class="ictblBaslik">*Cookieless:</strong> Cookiless ayarını HttpcookieMode enumarationlarına göre yapabil<br />
irsiniz.<br />
Değerler aşağıdaki gibidir..<br />
<strong class="ictblBaslik">UseCookies:</strong> 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.<br />
<strong><span class="ictblBaslik">UseUri: </span></strong>Cookieler başka ayarlara bakılmaksızın deaktivite edilir yani kullanılmaz.Cookie yerine Session_Id url de saklanır.<br />
<strong class="ictblBaslik">UseDeviceProfile:</strong> 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.<br />
<strong class="ictblBaslik">AutoDetect:</strong> 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.<br />
<strong class="ictblBaslik">*TimeOut: </strong>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.<br />
Session.Timeout=10;<br />
<strong class="ictblBaslik">*Mode:</strong> 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.<br />
<strong class="ictblBaslik">InProc:</strong> 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.)<br />
<strong class="ictblBaslik">Not:</strong> Eğer birden fazla server kullanacaksanız out-of-service veya SqlServer state servislerini kullanmanız gerekir.<br />
<strong><span class="ictblBaslik">Off:</span></strong> Adından da anlaşılabileceği gibi session state ayarlarını deaktivite eder.<br />
<strong><span class="ictblBaslik">StateServer:</span></strong> 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  <span class="icBaslik">SqlConnectionString</span> 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. <strong>           </strong><br />
<strong><span class="ictblBaslik">SqlServer:</span></strong> 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.<br />
<strong class="ictblBaslik">Custom: </strong>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.</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin"><strong>Application State:</strong></td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">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.</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin" height="112">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td width="614" height="112" valign="top" bgcolor="#f8f8f8">
<p class="style7">   private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
int say=(int)Application["SayacKur"];<br />
say++;<br />
Application["SayacKur"]=say;<br />
LblSayac.Text=say.ToString();<br />
}</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">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.</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td width="614" height="148" valign="top" bgcolor="#f8f8f8">
<p class="style7">private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
Application.Lock();<br />
int say=(int)Application["SayacKur"];<br />
say++;<br />
Application["SayacKur"]=say;<br />
Application.UnLock();<br />
LblSayac.Text=say.ToString();<br />
}</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="metin"> </td>
</tr>
<tr>
<td class="metin">   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.<br />
Application State konumuzla State Management konumuzu bitirmiş oluyoruz.İleriki konularımızda görüşmek üzere</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/state-management-3.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State Management &#8211; 2.1 Query String</title>
		<link>http://www.bilyaz.com/index.php/state-management-21-query-string.html/</link>
		<comments>http://www.bilyaz.com/index.php/state-management-21-query-string.html/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 23:17:20 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Query String]]></category>
		<category><![CDATA[State Management]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=50</guid>
		<description><![CDATA[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 <a href='http://www.bilyaz.com/index.php/state-management-21-query-string.html/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Fstate-management-21-query-string.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/state-management-21-query-string.html/"></a></div><table width="98%" align="center" border="0" cellspacing="0" cellpadding="0">
<table width="96%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#FFFFFF" class="metin">
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="baslik"><strong>2.1   Query String:</strong></td>
</tr>
<tr>
<td height="87">
<p>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.<br />
            Query String metodunda  bilgi adından da anlaşılacağı üzere string katarlar olarak depolanmaktadır.<span class="ictblBaslik"><strong>(</strong>Örn:  www.google.com/search?q=Eskişehir Osmangazi Üniversitesi<strong>)</strong></span> 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. </p>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td height="48">
<table width="632" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="43" height="38">
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td width="589">
<p>Her internet tarayıcısı URL&#8217;sinin  uzunluğunu sınırlamıştır.Bu sebepten dolayı URL&#8217;ye çok fazla bir bilgi  girilemez dahası tarayıcılar arası uyumu gözetmek zorunda kalabilirsiniz.</p>
</td>
</tr>
<tr>
<td height="54">
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td>
<p>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</p>
</td>
</tr>
<tr>
<td height="40">
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td>
<p>Dikkat edilmesi gereken en önemli  özellikleriden biri de legal karakter içermesi gerekliliğidir.Komplex  karakterler kullanılamaz.</p>
</td>
</tr>
<tr>
<td>
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td><span class="ictblBaslik">***</span> 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</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>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.</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td height="78" class="metin">
<div align="center"><img src="images/makale/ok/sm2_ilk.jpg" width="500" height="350" /></div>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>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<br />
İlk Sayfanın kodu şöyle olmalıdır.</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="861" valign="top" bgcolor="#F8F8F8">
<p class="style7">public class  WebForm1 : System.Web.UI.Page<br />
                          {<br />
                          protected System.Web.UI.WebControls.Button cmdView;<br />
                          protected System.Web.UI.WebControls.ListBox LstItems;<br />
                          protected System.Web.UI.WebControls.Label LblError;<br />
                          protected System.Web.UI.WebControls.CheckBox  ChckFull;<br />
                          private string  contents;</p>
<p>                          protected void  Page_Load(object sender, System.EventArgs e)<br />
                          {<br />
                          LstItems.Items.Add(&quot;Beko  TFG2000 Çamaşır Makinesi&quot;);<br />
                          LstItems.Items.Add(&quot;Bosch  E210 Çamaşır Makinesi&quot;);<br />
                          LstItems.Items.Add(&quot;Ariston  WQ400 Çamaşır Makinesi&quot;);<br />
                          LstItems.Items.Add(&quot;Arçelik  A990 Çamaşır Makinesi&quot;);<br />
                          LstItems.Items.Add(&quot;Lesita  L365 Çamaşır Makinesi&quot;);<br />
                          }
                        </p>
<p class="style7">            #region Web Form Designer generated  code<br />
                            override protected void OnInit(EventArgs e)<br />
                            {<br />
                            //<br />
                            // CODEGEN: This call is required by the ASP.NET Web Form  Designer.<br />
                            //<br />
                            InitializeComponent();<br />
                            base.OnInit(e);<br />
                            }</p>
<p>                            private void  InitializeComponent()<br />
                            {    <br />
                            this.cmdView.Click += new  System.EventHandler(this.cmdView_Click);<br />
                            this.Load += new  System.EventHandler(this.Page_Load);</p>
<p class="style7">            }<br />
                            #endregion</p>
<p class="style7">      private void  cmdView_Click(object sender, System.EventArgs  e)<br />
                            {<br />
                            if(LstItems.SelectedIndex==-1)<br />
                            {<br />
                            LblError.Text=&quot;Bir  Ürün Seçmelisiniz&#8230;&quot;;<br />
                            }<br />
                            else<br />
                            {<br />
                            string url=&quot;NewPage.aspx?&quot;;<br />
                            url+=&quot;Item=  &quot;+LstItems.SelectedItem.Text+&quot;&amp;&quot;;<br />
                            url+=&quot;Mode=  &quot;+ChckFull.Checked.ToString();<br />
                            Response.Redirect(url);<br />
                            }<br />
                            }                 </p>
<p class="style7">}<br />
                            }</p>
</td>
</tr>
</table>
<p align="left">&nbsp;</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>Görebileceğiniz gibi Query Stringe geçerli olmayan karakter bilgileri  gönderdik mesela boşluk karakteri,&#8220;Ç&#8221;harfi hepsi için ASP.NET in bir şifreleme  yöntemi vardır.Boşluk için %20  &#8216;Ç&#8217;  karakteri için %c3%87 &#8230;..<br />
                      Bilgiyi alan sayfa bu stringi sorun çıkmadan  orijinal haliyle alır</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p align="center"><img src="images/makale/ok/sm2_ikinci.jpg" width="500" height="380" /></p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>2.sayfanın oluşabilmesi için aşağıdaki kodu oluşturmak gereklidir</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="515" valign="top" bgcolor="#F8F8F8">
<p class="style7">public class  NewPage :System.Web.UI.Page<br />
                          {<br />
                          protected System.Web.UI.WebControls.Label LblAyrıntı;<br />
                          protected  System.Web.UI.HtmlControls.HtmlGenericControl FONT1;<br />
                          protected System.Web.UI.WebControls.Label LblInfo;</p>
<p>                          private void  Page_Load(object sender, System.EventArgs e)<br />
                          {<br />
                          LblAyrıntı.Visible=false;<br />
                          LblInfo.Text=&quot;Item&quot;+Request.QueryString[&quot;Item&quot;];<br />
                          LblInfo.Text+=&quot;&lt;br/&gt;Tüm Ayrıntı:&quot;;<br />
                          LblInfo.Text+=Request.QueryString[&quot;Mode&quot;];<br />
                          if(Request.QueryString[&quot;Mode&quot;]==&quot;true&quot;)<br />
                          {LblAyrıntı.Visible=true;<br />
                          }</p>
<p class="style7">      }<br />
                            #region Web Form Designer generated code<br />
                            override protected void OnInit(EventArgs e)<br />
                            {</p>
<p>                            InitializeComponent();<br />
                            base.OnInit(e);<br />
                            }</p>
<p>                            private void  InitializeComponent()<br />
                            {    <br />
                            this.Load += new  System.EventHandler(this.Page_Load);<br />
                            }<br />
                            #endregion<br />
                            }<br />
                            } </p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/state-management-21-query-string.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State Management &#8211; 2.2 Cookies</title>
		<link>http://www.bilyaz.com/index.php/state-management-22-cookies.html/</link>
		<comments>http://www.bilyaz.com/index.php/state-management-22-cookies.html/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 23:19:16 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Cookies]]></category>
		<category><![CDATA[State Management]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=52</guid>
		<description><![CDATA[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ı <a href='http://www.bilyaz.com/index.php/state-management-22-cookies.html/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Fstate-management-22-cookies.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/state-management-22-cookies.html/"></a></div><table width="98%" align="center" border="0" cellspacing="0" cellpadding="0">
<table width="96%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#FFFFFF" class="metin">
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="baslik">
<p><strong>2.2 Cookies:</strong></p>
</td>
</tr>
<tr>
<td height="87">
<p>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.<br />
            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. <br />
            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).<br />
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.</p>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td height="48">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="861" valign="top" bgcolor="#F8F8F8">
<p class="style7">public class  WebForm1 : System.Web.UI.Page<br />
                          {<br />
                          protected  System.Web.UI.WebControls.TextBox TxtName;<br />
                          protected  System.Web.UI.WebControls.Button cmdStore;<br />
                          protected  System.Web.UI.WebControls.Label LblBilgi;</p>
<p>                          private void  Page_Load(object sender, System.EventArgs e)<br />
                          {<br />
                          HttpCookie  cookie=Request.Cookies[&quot;Preferences&quot;];</p>
<p class="style7">  if(cookie==null)//Cookie  yaratılmamışsa değeri NULL&#8217;dur<br />
                            {<br />
                            LblBilgi.Text=&quot;&lt;b&gt;Hoşgeldin  Ziyaretçi&lt;b/&gt;&quot;;<br />
                            }<br />
                            else<br />
                            {<br />
                            LblBilgi.Text=&quot;&lt;b&gt;Cookie  Bulundu&lt;b/&gt;&lt;br/&gt;&lt;br/&gt;&quot;;<br />
                            LblBilgi.Text=&quot;Hoşgeldin     &quot;+cookie[&quot;Name&quot;];<br />
                            }</p>
<p class="style7">       }</p>
<p class="style7">private void  InitializeComponent()<br />
                            {<br />
                            this.cmdStore.Click += new System.EventHandler(this.cmdStore_Click);<br />
                            }</p>
<p>                            private void  cmdStore_Click(object sender, System.EventArgs  e)<br />
                            {<br />
                            HttpCookie  cookie=Request.Cookies[&quot;Preferences&quot;];<br />
                            if(cookie==null)<br />
                            {<br />
                            cookie=new  HttpCookie(&quot;Preferences&quot;);<br />
                            }<br />
                            cookie[&quot;Name&quot;]=TxtName.Text;<br />
                            cookie.Expires=DateTime.Now.AddMonths(2);//Cookie 2 ay süreyle saklanacak&#8230;<br />
                            Response.Cookies.Add(cookie);</p>
<p class="style7">LblBilgi.Text=&quot;&lt;b&gt;Cookie  Yaratıldı&#8230;&lt;b/&gt;&lt;br/&gt;&lt;br/&gt;&quot;;<br />
  LblBilgi.Text=&quot;Yeni  Kullanıcı &quot;+cookie[&quot;Name&quot;];</p>
<p>                            }   <br />
                            }<br />
                            }</p>
<p class="style7">&nbsp;</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p align="center"><img src="images/makale/ok/sm2_cokki.jpg" width="500" height="400" /></p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td height="78" class="metin">
<p>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&#8230;..</p>
</td>
</tr>
<tr>
<td class="metin">
<p>&nbsp;</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/state-management-22-cookies.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>State Management</title>
		<link>http://www.bilyaz.com/index.php/state-management.html/</link>
		<comments>http://www.bilyaz.com/index.php/state-management.html/#comments</comments>
		<pubDate>Tue, 21 Nov 2006 23:22:49 +0000</pubDate>
		<dc:creator>Omer Baris KARAER</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[State Management]]></category>

		<guid isPermaLink="false">http://www.bilyaz.com/?p=57</guid>
		<description><![CDATA[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&#8230;)  request hızını da göz <a href='http://www.bilyaz.com/index.php/state-management.html/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bilyaz.com%2Findex.php%2Fstate-management.html%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=lucida grande&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px;height:30px;margin-top:5px;"></iframe><div align="left" style="float:left;padding:0px 5px 5px 0px;"><a name="fb_share" type="box_count" share_url="http://www.bilyaz.com/index.php/state-management.html/"></a></div><table width="98%" align="center" border="0" cellspacing="0" cellpadding="0">
<table width="96%" align="center" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#FFFFFF" class="metin">
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="136">
<p>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.<br />
                      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&#8230;)  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:</p>
</td>
</tr>
<tr>
<td>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="9%" height="23">
<p align="center" class="metin"><img src="images/post.gif" width="15" height="15" /></p>
</td>
<td width="91%">
<ol>View State</td>
</tr>
<tr>
<td height="24">
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td>
<ol>
                          Session State</td>
</tr>
<tr>
<td height="34">
<div align="center"><img src="images/post.gif" width="15" height="15" /></div>
</td>
<td>
<ol>
                          Application  State</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="baslik">View State : </td>
</tr>
<tr>
<td height="87">
<p>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.<br />
                      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.</p>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td height="48">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="88" valign="top" bgcolor="#F8F8F8">
<p class="style7">//this anahtar sözcüğü görüntülenen sayfanın nesnesine başvurur.<br />
                          this.viewstate[&#8220;sayac&#8221;]=1;<br />
                          int Sayac;<br />
                          Sayac=this.ViewState[&quot;sayac&quot;];<br />
                          LblGoster.Text=Sayac.ToString();   //Sonuç 1 olarak  görünecektir</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>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.</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td height="78" class="metin">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="43" valign="top" bgcolor="#F8F8F8">
<p class="style7">int Sayac;//int türünde  değişken yaratılır <br />
                          Sayac=(int)this.ViewState[&#8220;sayac&#8221;];// int türündeki  değer atanır</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>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-<br />
                      mamıştır.Sisteminize sızmak  istiyen art niyetli kişilerin eriişmine açıktır.Bunu önlemek<br />
                      sistem güvenliği açısından  bir mecburiyet olduğuna göre önlem 2 şekilde alınabilir <br />
                      <span class="ictblBaslik">1-)</span>Viewstate  değerinin hash code olmasını sağlayarak yapılması;<br />
                      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)<br />
                      İptal  işlemi web.config dosyasındaki enableViewStateMac=&#8221;False&#8221;  denilerek yapılabilir.<br />
                      <span class="ictblBaslik">2-)</span>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.)<br />
                      Aşağıdaki  örnekle konuyu bitiriyoruz.</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p align="left"><img src="images/makale/ok/stateman.jpg" alt="a" width="642" height="435" hspace="12" align="left" /></p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="614" height="171" valign="top" bgcolor="#F8F8F8">
<p class="style7">public partial class _Default : System.Web.UI.Page <br />
                          {<br />
                          private string icerik;<br />
                          protected void Page_Load(object  sender, EventArgs e)<br />
                          {<br />
                          if (this.IsPostBack)//Sayfanın  geri yüklenen olup olmadığını kontrol eder<br />
                          {<br />
                          icerik = (string)ViewState[&quot;icerik&quot;];<br />
                          }<br />
                          }<br />
                          protected void Page_PreRender(object  sender, EventArgs e)<br />
                          {<br />
                          ViewState[&quot;icerik&quot;]  = icerik;<br />
                          }</p>
<p class="style7">    protected void CmdKaydet_Click(object  sender, EventArgs e)<br />
                            {<br />
                            //TextBoxa  yazılan değeri üye değişkene atayalım<br />
                            icerik = TxtGoster.Text;<br />
                            //İçeriğin  saklandığının anlaşılması için TextBox içeriğini temizleyelim<br />
                            TxtGoster.Text = &quot;&quot;;<br />
                            }<br />
                            protected void CmdBaglan_Click(object  sender, EventArgs e)<br />
                            {<br />
                            TxtGoster.Text = icerik;<br />
                            }<br />
                            }</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">
<p>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&#8230;&#8230;&#8230;</p>
</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
<tr>
<td class="metin">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.bilyaz.com/index.php/state-management.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

