Session State - II

Kategori: (ASP - Active Server Pages / ASP.Net) Yazan: Phenomenon, 02-10-2008

Bu yazımızda, Session State çalışma modlarından bahsedeceğiz. Farklı durumlarda, çalışma modunun seçiminde göz önüne almanız gereken kriterleri açıklayacağız.

Session State Modları

Dört genel konfigürasyon modu vardır; in-process Mod, out-of-process Mod, SQL Server Mod ve Cookieless Mod.

In-process Mod

In-process Mod, klasik ASP Session State ile aynıdır. Yani, session süreç (process) tarafından yönetilir ve eğer süreç kaybolur veya herhangi bir sorun olursa, session da kaybolmuş olur. ASP.Net’in getirdği yeniliklere rağmen yine de bu yöntemi seçebilirsiniz. Nedeni ise çok basit : Performans. İlerde görecek olduğumuz SQL Server’dan Session State’i okumak, Session sözlüğünden sürecin değer okumasından daha yavaştır.

In-process Mod, ASP.Net için varsayılan değerdir. Bu özellik kullanıldığında, config.web dosyasında yer alan özelliklerden cookieless ve timeout özelliği kullanılabilir.

SessionDurumu.aspx sayfasını çalıştırıp, session değerini setleyin (Session Yaz butonu ile). Ardından, ASP.NET sürecini durdurup yeniden başlatın (bir komut penceresi açıp, “iisreset” komutunu çalıştırın). Session değerini okumak istediğinizde, Session değerinin kaybolduğunu göreceksiniz. (Session değeri NULL olacaktır)

Out-of-process Mode

.NET SDK bir Windows NT Servisi olan ASPState ‘i içinde barındırır. Bu servis, out-of-process Modunun yönetilmesinde kullanılır. Bu servisi kullanmak için, öncelikle servisin başlatılması gerekir. Komut satırı açıp;

net start aspstate

yazdığınızda servis başlatılacaktır. Eğer sorunsuz olarak servis başlatılmışsa, aşağıdaki pencerede görülen çıktıyı görmeniz gerekir:

Resim - 2. ASPState servisinin komut satırından başlatılması

Bundan sonra, ASPState servisi çalıştığından, konfigürasyon dosyamızda gerekli değişiklik yaparak, session modu StateServer olarak değiştirebiliriz.

NOT : Dikkat etmeniz gereken şey, “StateServer” değeri case sensitive değimiz küçük-büyük harf duyarlıdır. Yani, mode değerine “stateserver” atarsanız hata alacaksınızdır.

<sessionState

mode=”StateServer”

stateConnectionString=”tcpip=127.0.0.1:42424″

sqlConnectionString=”data source=127.0.0.1;user

id=sa;password=”

cookieless=”false”

timeout=”20″

/>

Değişen tek şey, mod değerinin StateServer olmasıdır. Bu sayede, ASP.NET sistemde ASPState servisinin, stateConnectionString özelliğinde belirtilen makinede çalışıp çalışmadığını, belirtilen porttan (42424) kontrol edecek.

SessionDurumu.aspx sayfasını yeniden çalıştırdığımızda, session değerini setleyip, IIS yi durdurup yeniden başlattığımızda (iisreset komutu ile), session değerinin kaybolmadığını göreceğiz.

SQL Server Mode

SQL Server Modu, Windows NT servisine benzer şekilde çalışır. Bu modda, Session bilgisi, bellekte tutulmak yerine, SQL Server da tutulmaktadır. Session state’i SQL Server da tutmak için öncelikle gerekli tabloların ve saklı yordamların (stored procedure) SQL Server üzerinde oluşturulması gerekir. .NET SDK, bu işlemi gerçekleştirebileceğimiz bir SQL scripti içerir. Bu scripti, WINNT\Microsoft.NET\Framework\(versiyon) klasörü altında bulabilirsiniz. SQL Server’da gerekli tabloları ve saklı yordamlı oluşturacak olan sql script “InstallSqlState.sql”, oluşturulan bu tabloları ve saklı yordamları sistemden kaldıran script ise “UninstallSqlState.sql” isimli dosyalardır.

Tablo ve Saklı Yordamların SQL Server’da Oluşturulması

SQL Server’ın Session State’i tutabilmesi için gereken tablo ve saklı yordamları oluşturmak için, SQL Query Analyzer’ı açın. Ardından File → Open menüsünden InstallSqlState.sql dosyasını bulun. Dosyayı yakından incelediğinizde, script öncelikle sistemde, daha önce Session için kullanılan saklı yordamları ve geçici tabloları kaldırıyor. Ardından ASPState isminde bir database, DropTempTables, CreateTempTables, ResetData, TempGetAppId başta olmak üzere Session State’in yönetilmesi için saklı yordamlar oluşturmaktadır.

Query → Execute menüsünden scripti çalıştırdığınızda, SQL Query Analyzer’ın Message kısmında, işlemlerin sorunsuz olarak gerçekleştiğine ilişkin mesajlar göreceksiniz. SQL Query Analyzer penceresini kapatıp Enterprise Manager penceresini açtığınızda, ASPState veritabanının ve ilgili saklı yordamların oluştuğunu kontrol edebilirsiniz.

Resim – 3 : Session State için SQL Server’a eklenen tablo ve saklı yordamlar

SQL Server’da gerekli olan değişiklikleri yaptıktan sonra, konfigürasyon dosyanıza geri dönüp mode özelliğini SQLServer olarak atayın. sqlConnectionString özelliğindeki user id ve password alanlarına da geçerli kullanıcı adı ve şifresi atadıktan sonra, yapılması gereken değişiklikleri tamamlamış oluyorsunuz.

<sessionState

mode=”SQLServer”

stateConnectionString=”tcpip=127.0.0.1:42424″

sqlConnectionString=”data source=127.0.0.1;

user id=sa;password=my_password”

cookieless=”false”

timeout=”20″

/>

Daha önce olduğu gibi SessionDurumu.aspx sayfamızı açıp Session nesnesine bir değer atayalım. Ardından IIS’yi durdurup yeniden başlatalım (iisreset komutu ile). Session nesnesini okumaya çalıştığımızda, session değerinin kaybolmadığını göreceğiz.

Bunun yanında, birden çok SQL Server’ınızı Cluster yapıda kullanarak, herhangi birinde sorun olması durumunda, diğer SQL Server’ın araya girip session nesnesini saklamasını sağlayabilirsiniz.

Cookieless State

Son olarak, ASP.NET Session State’i cookieless olarak konfigüre edeceğiz. Bu konfigürasyon sayesinde, client tarafta cookiee’ler kabul edilmese bile session state kaybolmayacaktır.

Session state’in korunma işlemi, URL ’ye tek ve benzersiz olan (unique) bir ID ‘nin eklenmesi ile sağlanır.

http://localhost/(jks3ft35t21z5×55vln21s53)/Application/SessionDurumu.aspx

ASP.NET, bu ID ‘yi client taraf, web sitesinde gezinmeye devam ettikte (sitedeki linkleri kullanmak şartı ile) Session state’in korunmasında kullanır. Eğer ziyaretçi, URL ‘yi yeniden yazarsa, session state kaybolacaktır (null olacaktır).

Cookieless özelliğini, konfigürasyon dosyamızdaki cookieless özelliğine atayacağımız boolean (true; geçerli, False; geçerli değil) ile belirleyebiliriz.

<sessionState

mode=”StateServer”

stateConnectionString=”tcpip=127.0.0.1:42424″

sqlConnectionString=”data source=127.0.0.1;

user id=sa;password=my_password”

cookieless=”true”

timeout=”20″

/>

NOT : Biz örneğimizde mod olarak StateServer modunu seçtik. Fakat tüm modlar cookieless özelliğini desteklerler.

Performans ve Güvenilirlik

Session State’in hangi modu’nu kullanacağınıza kara vermeden önce, aşağıdaki durumları göz önüne almanızı tavsiye ederim;

·                     In process: Bu mod size iyi bir performans sunacaktır. Çünkü, session state bilgisi ASP.NET süreci tarafından korunmaktadır. Tek bir web server üzerinde koşan uygulamalar için, session state bilgisinin önem taşımadığı durumlarda seçilebilecek çalışma modudur.

·                     Out of process. ASPState süreci Session State işlemini kontrol ettiği için performans olarak iyi bir sonuç verir. Ayrıca, session state’i kullanan farklı web server’ların olduğu bir yapı kullanıyorsanız, bu mod size güvenilir bir yapı sunacaktır.

·                     SQL Server. Eğer session state’in güvenirliği sizin için en önemli husus ise, bu mod size önerebileceğim tek moddur. Performans out-of-process modunda olduğu kadar iyi değildir fakat birden çok SQL Server’ın cluster bir şekilde çalışması durumunda, eğer ticari bir şirket iseniz, müşterilerinize güvenliği tam bir sistem sunmuş olursunuz.

 

Eğer isterseniz, farklı şirketlerin size sunduğu Uzatılmış Session State Yönetim (Extended Session State Manager) sistemlerini de kullanabilirsiniz. Bunlardan en bilineni, Netscape’in LDAP (Lightweight Directory Access Protocol) directory sistemidir.

Bir sonraki yazıda buluşmak dileğiyle.

Hoşçakalın…

Yazar : Mustafa Bilgehan İMAMOĞLU
e-Posta : bilgehan@msakademik.net

Kaynak

Yorum Yazın

Gues World - Photoshop
Netkabus - Bilgi Portal
reklam alan
reklam alan