Merhaba,
Bu makalemizde sizlere ASP(Active Server Pages) ve ASP.NET arasında Session nesnesinin nasıl paylaşılacağını ve bu Session değişkenlerinin ASP dosyalarından ASPX dosyalarına nasıl aktarılacağını anlatmaya çalışacağım.
Makalemize başlamadan önce ASP ve ASP.NET uygulamaları arasında Session nesnesinin paylaşımının dayandığı temel prensipleri tekrar gözden geçirmemizin faydalı olacağını düşünüyorum. Bu temel prensipler,
- ASP ve ASP.NET Session nesneleri paylaşılabilir değildir. (Problemimizin temel kaynağı da zaten budur)
- Session değişkenlerinin aktarımı her iki yönde de yapılabilir. ASP'den ASP.NET'e yada ASP.NET'ten ASP'ye.
- Session nesnesi içerisinde çok önemli bilgilerin saklanabileceği göz önünde bulundurulduğunda, ASP/ASPX Session aktarımın yapıldığı uygulamaların yada çözüm yollarının oldukça güvenli olmaları gerekir.
|
Şunu du hatırlatmakta yarar var ASP ile ASP.NET arasındaki bu session aktarımı farklı şekillerde de olabilir. örneğin bu problemin çözümü için bir veritabanı uygulaması da düşünülebilir. Bu çözüm yolunda da ASP ve ASPX dosyaları arasında geçiş(her iki yönde de) yapılacağı zaman bir ara dosya Session değişkenlerini alarak veritabanına bir GUID (Globally Unique ID) ile kaydeder ve yönlendirilen bir sayfa da veritabanından bu değişkenleri alarak kendi Session nesnesi içerisine kaydeder ve bu şekilde aktarım gerçekleştirilir.
Bu iki yöntemi karşılaştıracak olursak veritabanı kullanılan çözüm yolunun daha iyi olduğunu söyleyebilirim. Birinci neden bu yöntemin daha güvenli olmasıdır. İkincisi ise, burada ele alacağımız çözüm yolunda yalnızca ASP 'den ASP.NET 'e Session değişkenlerinin aktarımı yapılabilir. Başka bir deyişle, burada anlatılacak olan çözüm yolunda bu aktarım çift yönlü yapılamaz. Bunun nedeni de ASP.NET 'te herhangi bir formu POST edeceğimiz sayfayı belirleyemiyor oluşumuzdur. ASP.NET 'te her sayfa yine kendisine bilgilerini POST eder. (Postback)
Makalemizin temel noktasına geri dönelim. Bu örneğimizde bir ASP dosyasından bir ASPX dosyasına Session değişkenlerimizi aktaracağız, basit bir form ile ASP dosyamızdan form değerlerimizi POST ettikten sonra session nesnemize bu değerleri aktarıp bir ASPX dosyasına bu değerleri transfer edeceğiz. Bu kapsamda kullanacağımız dosyalar ve temel görevleri aşağıdaki gibidir :
Login.asp : Yukarıda da ekran görüntüsünü gördüğünüz, default giriş sayfamız. Kullanıcılar bu sayfa üzerindeki form bilgilerini girdikten sonra bu değerleri "gönder" düğmesi ile sunucuya POST edecek.
Session_transfer.asp : Login.asp sayfamızın form değerlerini POST edeceği ve bu değerlerin Session değişkenlerimize aktarılacağı sayfamız. Bu kısımda dikkatinizi bir noktaya çekmek istiyorum. Dosya içerisinde yorum olarak belirttim bu konuyu ama gözden kaçmaması için burada da değinelim. Normalde kullanıcı giriş bilgileri (kullanıcı adı, şifre) onaylandiktan sonra Session değişkenlerinin güncellenmesi gerekir ancak bahsettiğimiz onaylama işlemi bu makalemizin konusundan uzak olduğu için biz bu bilgilerin doğru olduğunu varsayıyoruz ve girilen bilgileri hiçbir kontrol mekanizmasından geçirmeden Session değişkenlerimize aktarıyoruz.
Şimdi bu dosyamızın içerdiği koda bir göz atalım.
<%
Session("Name") = Request.Form("Name")
Session("Surname") = Request.Form("Surname")
Session("Website") = Request.Form("Website")
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Response.Write("<form name=test id=test action"
Response.Write("=Session_transfer.aspx method=post >")
For each Item in Session.Contents
Response.Write("<input type=hidden name=" & Item)
Response.Write( " value=" & Session.Contents(item) & " >")
next
Response.Write("</FORM>")
Response.Write("<script>test.submit();</script>")
%>
Şimdi burada ne yapıldığını anlatmaya çalışalım. öncelikle form değişkenleri Session değişkenlerine aktarılıyor. Ardından bir form ile bu session değişkenleri alınarak oluşturulan bir form'a gizli form değerleri olarak aktarıldıktan sonra oluşturulan bu form JavaScript ile otomatik olarak az sonra üzerinde duracağımız "Session_transfer.aspx" dosyasına POST ediliyor.
Session_transfer.aspx : Bu ASPX dosyasımızın işlevi ise, kendisine POST edilen form değişkenlerini alarak bu değişkenleri ASP.NET Session nesnesi içerisinde belirtilen ad ve değer ile aktarmak. Şimdi de bu sayfamızın koduna (Page_Load Event) bir göz atalım...
private void Page_Load(object sender, System.EventArgs e)
{
for(int i=0;i<Request.Form.Count;i++)
{
Response.Write(Request.Form.GetKey(i));
Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}
Response.Redirect(Session["RedirectPage"].ToString());
}
Sayfa kendisine POST edilen form değişkenlerini(bu işlemi yukarıda belirttiğim gibi Session_transfer.asp içerisinde yapıyoruz) bir döngü içerisinde ASP.NET Session değişkenlerine aktarıyor. Bu işlemin ardından sayfa yine kendisine form aracılığı ile aktarılan ve ASP-ASPX arasında Session değişkenlerinin doğru aktarılıp aktarılmadığını gösteren bir sayfaya yönlendiriliyor. (Bu sayfa login.asp dosyamız içerisinde belirtilmiştir)
LoginInfo.aspx : Az önce de belirttiğim gibi Session değerlerinin doğru aktarılıp aktarılmadığını kontrol etmek amacıyla hazırlanmış olan sayfamız. Bu sayfamızın kodu (Page_Load Event) ise :
private void Page_Load(object sender, System.EventArgs e)
{
if(Session["Name"]!=null)
lblName.Text = Session["Name"].ToString();
if(Session["Surname"]!=null)
lblSurname.Text = Session["Surname"].ToString();
if(Session["Website"]!=null)
lblWebsite.Text = Session["Website"].ToString();
if(Session["Username"]!=null)
lblUsername.Text = Session["Username"].ToString();
if(Session["Password"]!=null)
lblPass.Text = Session["Password"].ToString();
}
Gördüğünüz gibi basit olarak ASP dosyasından aktardığımız Session değişkenlerini alarak kullanıcıya gösteriyor. Bu örnek için bu sayfamızın ekran çıktısı ise aşağıdaki gibidir :
Basit ama bana göre oldukça mühim bir konuyu bu makale ile sizlere aktarmaya çalıştım. İşinize yarayacağına eminim. Umarım beğenmişsinizdir.