Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > ASP.NET / Silverlight / Moonlight

Cevapla
 
LinkBack Seçenekler
Eski 03/01/2008, 15:57   #1 (permalink)
Üye
 
Üyelik Tarihi: 04/2007
Mesaj: 53
Varsayılan Önce Açılan Sessionu Kapatma

Merhabalar,
Benim iki sorum olacak:
Birincisi;
Uygulamamda c# da giren her kullanıcıya web serviste session açıyorum ve veritabanına session id yi ve girdi değerini true olarak yazıyorum.Tekrar aynı kullanıcı adıyla giriş yapıldığında önce açılan sessionu kapatmak istiiyorum ama kapatamıyorum.Global.asax de session_end olayında
"UPDATE PERSONELGC SET GIRIS='FALSE' where SESSIONID='" + Session["SESSIONID"] + "'";
koları var.Eğer c# programında form kapatılırsa veritabanı değeri false olsun diye bu kodları yazdım(bu yüzden önce açılan sessionu kapatamıyor olabilirim)
Önce açılmış olan sessionu abondon() nasıl edebilirim.
İkinci problemim;
C# dan web servise her istek geldiğinde benim kullanıcı adı, sessionid'yi kontrol etmem lazım(sessionid o kullanıcıya aitmi diye).
Bunu web servisinde her methodun basına kontrol koyarak yapmam imkansız.Gerek http module gerekse global.asax deki
Application_AuthenticateRequest olayları işime yaramadı.Servisteki consructer de kontrol yapayım dedim, ordada session["Kullanıcıadi"]==null ifadesinde hata çıktı(sanırım session henüz yaratmamış olduğundan).Bu konuda fikir verebilecek arkadaşlara teşekkür ederim.
hülya hatta değil   Alıntı Yaparak Yanıtla
Eski 03/01/2008, 18:33   #2 (permalink)
Bursa
 
writeLine Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2005
Yer: Bursa
Mesaj: 559
Varsayılan

Alıntı:
hülya, mesajından alıntı: Mesajı Gör
C# dan web servise her istek geldiğinde benim kullanıcı adı, sessionid'yi kontrol etmem lazım(sessionid o kullanıcıya aitmi diye).
Merak ettim niye sessionid yi kontrol ettirmen gerekiyor?
writeLine hatta değil   Alıntı Yaparak Yanıtla
Eski 03/01/2008, 21:25   #3 (permalink)
Üye
 
Üyelik Tarihi: 04/2007
Mesaj: 53
Varsayılan

Çünkü web servisi her giren kullanıcıya sessionid atar ve kullanıcı işlemleri o session üzerinden gerçekleşir.Başka bir kullanıcı girdiğinde o kullanıcıya da baska bir sessionid atar.Dolayısıyla ben iki kullanıcıyı sessionid ler ile ayırt edebilirim.Olayı ve kurduğum mantığı şu şekilde ifade edeyim.Kullanıcı adı "hulya" ile giriş yaptım ve veritabanına aşağıdaki gibi kayıt edildi
kullanıcı adı ipno girdi sessionid
hulya 127.0.0.1 true er54t367yghuftrgevb67scol
başka bir bilgisayardan hulya ile giriş yaptım ve veritabanına şu şekilde kayıt edildi
kullanıcı adı ipno girdi sessionid
hulya 127.0.0.1 true er54t367yghuftrgevb67scol
hulya 192.68.2.2 true hgyt678gfr34sdmkolbg54ef
ben ilk girilen kullanıcının sessionu kapatmam lazım(Ama nasıl olacak bilemiyorum ).
ve web servise herhangi bir istek geldiğinde sessionid yi kontrol etmeliyim ki işlem yapan kullanıcı gercekten sistemde oturum açtığımız kullanıcı mı diye?(yani güvenlik için bunları yapmam lazım)
hülya hatta değil   Alıntı Yaparak Yanıtla
Eski 04/01/2008, 00:57   #4 (permalink)
Bursa
 
writeLine Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2005
Yer: Bursa
Mesaj: 559
Varsayılan

Aklıma gelen en mantıklı yol şu. Kullanıcının sessionid sini veritabanından kontrol edip true veya false değer döndüren bir fonksiyon oluşturman. Her webmethodun içindede

if(Kullanici_Onaylandi()) {
// eğer kullanıcı doğru sessionid ye sahipse yapılacaklar.
}


şeklinde kullanmak olacaktır. Veya biraz daha dolambaçlı bir yol izleyerek global.asax dosyasının senin webservislerinin bulunduğu klasöre erişim yapılmak istenince Application_beginrequest olayında session'ı kontrol edip ilgili bilgilere ulaşıp-ulaşmamasını sağlayabilirsin. Yanlız bundada şöyle bir durum var login olunan fonksiyon veya metodu bu erişim sınırlamasından muaf tutman gerekir. İlk aklıma gelenler bunlar.
writeLine hatta değil   Alıntı Yaparak Yanıtla
Eski 04/01/2008, 11:37   #5 (permalink)
Üye
 
Üyelik Tarihi: 04/2007
Mesaj: 53
Varsayılan

Tekrar Merhabalar,
Ya ben yapmaya çalışıyorum da şöyle düşündüm.
Session oluşturduğum yerde session değerlerini object bir diziye atıyorum.
publicvoid OturumAc(string _PersonelId, string _giriss)
{
string ipadres = HttpContext.Current.Request.UserHostAddress;
Session["PERSONELID"] = _PersonelId;
Session["IP"] = ipadres;
Session["DURUM"] = _giriss;
Session["SESSIONID"] = Session.SessionID;
Session.Timeout =10;
dizi = newobject[4] { _PersonelId.ToString(), ipadres.ToString(), _giriss.ToString(), Session.SessionID.ToString() };
}
şeklinde.Tabi baş tarafta
publicobject []dizi; tanımlamasını yaptım.
Diğer bir methot da karşılaştırma yapıyorum veritabanı ile
publicbool SessonKontrol()
{

if (dizi[1].ToString() !=null )
{

string sorg = "SELECT * FROM PERSONELGC WHERE PERSONELID='" + dizi[0]+ "' AND GIRIS='" +dizi[2]+ "' AND SESSIONID='" + dizi[3]+ "'";
if (DB.Sorgula(sorg, " PersonelIslem ()").Tables[0].Rows.Count > 0)
{
returntrue;
}
else
returnfalse;
}
else
return false;
}
Fakat if (dizi[1].ToString() !=null ) satırında sayfa görüntüleyemiyor diye bir hata çıkıyor.Acaba bir methodun içinde tanımladığım değişkeni başka bir methodun içinde kullanamıyormuyum.
hülya hatta değil   Alıntı Yaparak Yanıtla
Eski 04/01/2008, 14:04   #6 (permalink)
Bursa
 
writeLine Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2005
Yer: Bursa
Mesaj: 559
Varsayılan

Oturum açmak için gerekli fonksiyon ilk etapta true/false bir değer bildirsin. Mesela;
PHP Kodu:
    public bool OturumAc(string _PersonelIdstring sifre)
    {
        
/* 
         * 
         * KULLANICI ADI VE ŞİFRESİNİ KULLANARAK OTURUM AÇMAK
         * İÇİN GEREKLİ KOMUTLARIN YAZILMASI
         * 
         */

        
if (!dbNesnesi.eof)
        {
            
/* 
             * KULLANICI VERİTABANINDA BULUNDU VE ŞİFRESİ ONAYLANDI.
             * SESSION'A GEREKLİ ATAMALAR YAPILSIN.
             */
            
Session["PERSONELID"] = dbNesnesiPersonelID;
            
Session["SIFRE"] = dbNesnesiSIFRE;
            
Session["IP"] = ipadres;
            
Session["DURUM"] = _giriss;
            
Session["SESSIONID"] = Session.SessionID;
            
Session.Timeout 10;
            return 
true// GERİYE KULLANICININ ONAYLANDIĞINI BİLDİR.
        
}
        else
            return 
false// KULLANICI ADI VEYA ŞİFRESİ YANLIŞ.
        
    

Eğer kullanıcı doğru bir şekilde oturum açarsa geriye true değer gönderir ve sende bunu yazdığın programdan kontrol edebilirsin. Daha sonra metodların başına varolan sessionları kontrol eden başka bir fonksiyon tanımlarsın. Şu şekilde olabilir.

PHP Kodu:
    public bool SessionKontrol()
    {
        
string personelid Session["PERSONELID"];
        
string sifre Session["SIFRE"];
        
string sessionid Session["SESSIONID"];
        if (
String.IsNullOrEmpty(personelid) || 
            
String.IsNullOrEmpty(sifre) ||
            
String.IsNullOrEmpty(sessionid))
            return 
false;
        else
        {

            
string sorg "SELECT * FROM PERSONELGC WHERE PERSONELID='" personelid "' AND SIFRE='" sifre "' AND SESSIONID='" sessionid "'";
            if (
DB.Sorgula(sorg" PersonelIslem ()").Tables[0].Rows.Count 0)
            {
                return 
true;
            }
            else
                return 
false;
        }
    } 
Böylelikle kullanıcının hem oturum açmış olması hemde açılmış oturum bilgilerinin doğru olması beklenir. Aslında biraz düzenleme yaparak iki fonksiyonu tek bir fonksiyona dönüştürebilirsin. Sonuçta iki fonksiyonda benzer şeyler yapıyor.
writeLine hatta değil   Alıntı Yaparak Yanıtla
Eski 05/01/2008, 10:25   #7 (permalink)
Üye
 
Üyelik Tarihi: 04/2007
Mesaj: 53
Varsayılan

Merhabalar,
Ya yazdıklarını deniyorumda

string personelid = Session["PERSONELID"];

satırında sayfa görüntülenemiyor diyor.
string personelid = Session["PERSONELID"].ToString(); ifadesni de kullandım yine aynı hata çıkıyor.
Siz de bu kodlar çalışmışmıydı acaba?Bende niye çalışmıyor ki?
string personelid =Convert.ToString( Session["PERSONELID"]); ifadesinide yazdım yine olmuyor?
Global.asax dede session_start olayına
Session["PERSONELID"]="";
ifadesi yerleştirdim (hani oturum açmadan bi method çağrıldığında hata çıkmasın diye) ama
hata çıkmaya devam ediyor????
hülya hatta değil   Alıntı Yaparak Yanıtla
Eski 05/01/2008, 10:29   #8 (permalink)
Bursa
 
writeLine Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2005
Yer: Bursa
Mesaj: 559
Varsayılan

Hata veren yere breakpoint koy. Bakalım sorun nerdeymiş. Sen bu methodların başına EnableSession=true ibaresini koyuyormusun peki.
writeLine hatta değil   Alıntı Yaparak Yanıtla
Eski 05/01/2008, 10:42   #9 (permalink)
Üye
 
Üyelik Tarihi: 04/2007
Mesaj: 53
Varsayılan

Hata verilen yeri zaten breakpoint koyarak bulmuştum.

string personelid = Session["PERSONELID"];
satırında hemen sayfa görüntülenemiyor diyor.O satırı çalıştıramıyor.EnableSession=true ifadesini koymamıştım ama eklediğimde hata yine devam ediyor.
Try catch ekledim ve aynı satırda catche düştü.Hataya baktığımda
"NullReferenceExeption was caught" başlığında
"Object reference not set to an instance of an object" hatası çıktı.
hülya hatta değil   Alıntı Yaparak Yanıtla
Eski 05/01/2008, 11:09   #10 (permalink)
Bursa
 
writeLine Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2005
Yer: Bursa
Mesaj: 559
Varsayılan

[WebMethod(EnableSession=true)]
public bool SessionKontrol()
{
...
}

şeklinde değilmi? Hatayı muhtemelen EnableSession'dan veriyor diye düşünüyorum. Session nesnesini bulamıyor tahminimce.
writeLine hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Pencere Kapatma phpinfo PHP 4 25/09/2007 19:04
PHP XSS kapatma Komancix PHP 5 12/03/2007 17:08
form1 i kapatma aneksi Visual Basic 5 29/01/2007 16:02
Bir javascript hatası sessionu silebilirmi.. pirilti Javascript / DHTML / Ajax 9 24/07/2006 11:22
Pencereleri Kapatma akonuralp Javascript / DHTML / Ajax 1 31/05/2005 10:02


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 01:21.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net