Session nedir?neden ihtiyaç duyulur

Başlatan mir_as82, 29 Kasım 2017, 14:36:43

mir_as82

Arkadaşlar bu asp.net te falan kullanılan session nedir? Değişken midir? Sınıf mıdır?her kullanıcıya ayrı session mu açılır? Ve kullanıcının her girdiği sayfa bu session ile mi ilişkilendirilir ?

tunayk

#1
Session, tüm işletim sistemlerinde bulunur. Session malum olduğu üzere oturum demek olup, her kullanıcı için ayrı ayrı verilerin tutulması için kullanılır. Aslen bir Object Arraydir.

Aynı bilgisayarda birden fazla kullanıcı oturum açabilir ve her kullanıcı kendi masaüstü öğelerini, arka plan rengini, dosya indirmelerini vb. kendine göre kullanır ve bu bilgiler kişiye özel olarak saklanmış olur.  Farklı bir kullanıcı sisteme giriş yapacağı zaman o da kendi ayarları ile karşılaşır. İşletim sistemi bu bilgileri Kullanıcı adıyla kaydeder.(bkz. Documents and Settings klasörleri)

Aynı şey ASP.NET tarafında da bulunmaktadır.  Sizin web sayfanıza veya uygulamanıza bağlanmak istendiği zaman, bir kullanıcı sisteme bağlanmış olur. ASP.NET sistemi, uygulamaya her yeni bağlantı için ayrı ayrı,  "Session" adı altında bir veri deposu sunar.  Bu veri deposunda istediğiniz her türlü veriyi depolayabilirsiniz.  Buna neden ihtiyaç duyulur? Örneğin bir ASP.NET uygulamasında kullanıcı sayfalar arasında gezerken aynı verileri tekrar tekrar girmemiş olur.  Örneğin sizin uygulamanızda kendinize göre bir Login işleminiz olsun.  Kullanıcı bir kez isim ve şifre girdikten sonra, sitede başka bir sayfaya gittiğinde yeniden login olması gerekir. Ancak siz bir şekilde, sayfaya giren kullanıcının aslında bir önceki sayfadan geldiğini ve zaten login olduğu bilgisini bir yerde tutarsanız, yeniden şifre sormamış olursunuz.  Ha bu kaydı ister veritabanında tutun, ister dosyaya yazın pek çok yöntemi olabilir. Ancak Session nesnesi bunun için çok daha pratik bir depolama alanı sağlar.  Kullanıcı siteden çıktıktan sonra da veriler sistem tararfından otomatik olarak silinir. Bu sayede artıklarla uğraşmamış olursunuz.
Kullanım alanı olarak uygulama içeriğine bağlı çok çeşitli yöntemler bulunabilir. Hasılı faydalı bir özelliktir ancak kullanmadan da hayat devem edebilir.

mir_as82

Peki bu session veri deposunda nelerin tutulacağını, nasıl ve ne zaman üretileceğine, kodu yazan mı karar veriyor? anladığım sanki uygulamaya özgü her client için global nesneler üretiliyor, daha sonra o clientlerden başka requestler gelince ona göre işlem yapılıyor.
Peki hocam clientlerin her request işlemlerinde bu adamın sessionu var mı yok mu kontrolü yapılıyor mu kod içinde?


cetin1990

#3
session kontrolü bir sitede şöyle  yapılmıştı.

Session, URL sonuna eklenerek sayfalar arasında dolaşıp duruyordu.
http....xyz.asp?session=QWERTY
gibi.

Yani bir sayfaya geldin fakat URL içinde parametre olarak session yoksa veya geçersiz ise buraya yanlış yerden geldin, sayfayı elle yazdın demektir. Halbuki asıl sayfadan gelinse url içerisinde özel olarak üretilmiş session olurdu. Ben PHP ve ASP uzmanı değilim. Fakat URL içindeki session basit bir metodla kolayca okunabiliyor. Phpde  Get metodu olsa gerek

tunayk

Alıntı yapılan: mir_as82 - 29 Kasım 2017, 22:11:29
Peki bu session veri deposunda nelerin tutulacağını, nasıl ve ne zaman üretileceğine, kodu yazan mı karar veriyor? anladığım sanki uygulamaya özgü her client için global nesneler üretiliyor, daha sonra o clientlerden başka requestler gelince ona göre işlem yapılıyor.
Peki hocam clientlerin her request işlemlerinde bu adamın sessionu var mı yok mu kontrolü yapılıyor mu kod içinde?

Session isimli nesne, oturum açıldığı anda içi boş olarak sistem tarafından oluşturulur. Uygulamayı yazan kişinin özel bişey yapmasına gerek yok.  Session nesnesi, sistem tarafından bir Timeout süresince hafızada tutulur. Bu timeout süresince oturumu açan client'tan bir talep gelmezse, Session sonlandırılır ve nesne içindekilerle beraber hafızadan silinir. Aynı client daha sonra yeni bir istek yaparsa, yeni bir session nesnesi oluşturulur.

Başta söylediğimiz gibi bir client ilk talebi yaptığında Session nesnesi oluşur. Bu client, session timeout süresi bitmeden işlem yaptıkça, timout sayacı sıfırlanır ve session devam eder. Sistem zaten en başta session nesnesini oluşturur, yeniden varlık kontrolü yapmaz. Ancak uygulamayı yazan kişi, sayfada kullanacağı veriyi daha önceden session nesnesine yüklemiş miyim diye kontrol edebilir. Yüklemişse, o değeri alabilir veya yeni değer atayabilir.

Alıntı yapılan: cetin1990 - 29 Kasım 2017, 22:37:41
session kontrolü bir sitede şöyle  yapılmıştı.

Session, URL sonuna eklenerek sayfalar arasında dolaşıp duruyordu.
http....xyz.asp?session=QWERTY
gibi.

Yani bir sayfaya geldin fakat URL içinde parametre olarak session yoksa veya geçersiz ise buraya yanlış yerden geldin, sayfayı elle yazdın demektir. Halbuki asıl sayfadan gelinse url içerisinde özel olarak üretilmiş session olurdu. Ben PHP ve ASP uzmanı değilim. Fakat URL içindeki session basit bir metodla kolayca okunabiliyor. Phpde  Get metodu olsa gerek


Burada görmüş olduğunuz session, sadece isim benzerliği. ASP.NET deki session, komut satırından işletilmez. Dahili bir bileşendir. Komut satırında sayfaya gönderilen parametreler sadece basit işlemler için kullanılır. 
Sonuçta programcının yoğurt yeme şekline bağlı olarak aynı iş pek çok farklı şekilde yapılabilir.

mir_as82

Peki hocam 100 kişinin ayrı ayrı sessionları nasıl takip ediliyor ?
Anladığım şu, session aslında tüm uygulamada geçen bir global nesne.
Burada şunu sormak istiyorum  webform1.aspx de, id si txtAd olan bir element varsa, webform2 de txtAd diye bir değişken olamaz mı? Çünkü aynı key e olduğundan.
Session ["txtAd"] gibi bir tane bir değer olabilir tüm uygulamada? İkincisi olacaksa txtAd2 gibi mi olmalı?

tunayk

Yüz kişi uygulamaya bağlanmış ise yüz ayrı session nesnesi oluşur ve herkes kendi session'ındaki verilerle çalışır.  Sizin sayfaya ait kodunuzda Session.xxx şeklinde yaptığınız işlemler, sadece sizin nesnenizde işlem görür.
Sorunuza gelince, sayfadaki komponent ile session nesnesine attığınız değişken farklıdır.  txtAd bulunduğu sayfaya ait bir komponenttir ve her sayfada bir adet bulunmasında mahsur yoktur. Çünkü bu nesne sayfa ("Page") nesnesinin alt elemanıdır. Uygulamanın veya Session'ın değil.  Bir class içinde xyz isimli yalnızca bir değişken bulunabilir.  Ancak siz bir ArrayList'e bu classtan yüz tane aatabilirsiniz. Bu durumda ArrayList içinde yüz tane xyz değikeni bulunur ancak hepsi birbirinden farklı değer alabilir. Ait oldukları class farklı.

Buna karşılık Session["xyz"] olarak yalnızca bir değişken bulunabilir ve bunun farklı sayfalarda kullanabilirsiniz yalnızca bu sayfaların aynı oturuma ait olması koşuluyla. Sanırım sayfa, oturum, ve uygulama kavramları tam olarak oturmamış o yüzden biraz karışıklık oluyor.

mir_as82

Peki bu session içindeki veriler genelde ne tarz veriler oluyor?
Örneğin siz kendi browserinizda 10 defa farklı farklı sayfa açıp hepsinden ayrı ayrı default.aspx sayfasına girince 10 tane farklı session mu üretilir yoksa bir tane mi?
Başka bir sorumda, client ve server arasındaki uyum nasıl oluyor? Server session id tarzı bir bilgiyi çlient e gönderiyor ve onun üzerinden mi devam ediyorlar? Her çlient request inde sayfa get veya post edilirken http içinde bu ID mi gönderiliyor ?