none
asp.net birden fazla login olmayı engelleme RRS feed

  • Soru

  • merhaba arkadaşlar asp.net ile geliştirdiğim projemde giriş yapan kişi aynı bilgisayardan yada farklı bilgisayardan aynı anda ikinci kez login olmayı engellemek için ne yapmalıyım örnek olarak T.C. Kimlik numarası ile giriş yapıldı çıkış yapana kadar bu T.C. Kimlik numarası ile tekrar giriş yapılmasını engellemek istiyorum, yardımlarınızı bekliyorum

    Ömer ÖRNEK

    8 Mayıs 2017 Pazartesi 06:22

Yanıtlar

  • Merhaba,

    Eğer bilgileri Session'da tutuyorsanız, alışveriş sepeti mantığı ile sorununuzu çözebilirsiniz. Sepet yapılırken, ürün ekleme isteği yollandığında önce sepette olup olmadığı kontrol edilir, yoksa eklenir, varsa ürün adeti kadar artırılır.

    Sizin yapmanız gereken de benzeri işlem. Bir liste halinde giriş yapan kullanıcıları Session'da saklayıp, yeni giriş isteği olduğunda listeyi kontrol ettirmeniz. (giriş yapmışmı diye) Eğer giriş yapmadıysa, listeye eklensin, giriş yaptıysa false değer döndürsün ki işlem gerçekleşmesin.

    Örnek olarak;

     class IsUserOnlineControl
        {
            bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = HttpContext.Current.Session["OnlineUsers"] as List<string>;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    return true; 
    ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz. } } bool IsUserOnline(string tcKimlikNo) { List<string> OnlineUsers = HttpContext.Current.Session["OnlineUsers"] as List<string>; bool state = true; for (int i = 0; i < OnlineUsers.Count(); i++) { if (OnlineUsers[i].Equals(tcKimlikNo)) { state = false; break; } } return state; } }

    Çalışmalarınızda kolaylıklar dilerim.

    • Yanıt Olarak İşaretleyen omrornk 8 Mayıs 2017 Pazartesi 11:00
    8 Mayıs 2017 Pazartesi 07:46
    Moderatör
  • Class'ın içerisindeki IsUserOnline methodunun access modifiers'ını Public yaparsanız sorununuz çözülür. Kısacası adının başına public koymanız yeterli. "public bool IsUserOnline"

    Bir de bu konulara geçmeden önce, Object Oriented Programming'i öğrenmenizi tavsiye ederim. Zira, buralarda takılırsanız, proje ilerledikçe çok problem yaşayabilirsiniz.

    Eğer sorununuz çözüldü ise, Yanıt Olarak İşaretler misiniz?

    Çalışmalarınızda kolaylıklar dilerim.


    • Yanıt Olarak İşaretleyen omrornk 9 Mayıs 2017 Salı 12:37
    9 Mayıs 2017 Salı 12:19
    Moderatör

Tüm Yanıtlar

  • Sana önerim  bir   Custom Login Attribute yazman. Eski bir projemde uygulamıştım...
    8 Mayıs 2017 Pazartesi 06:45
  • Merhaba,

    @Adem Güney Bey'in belirttiği Custom Attribute bu noktada işinize yarayacaktır.

    Kişi login olduğunda bunu bir yerde tutmanız gerekli, veritabanı,txt,xml,json vs. ve her login işlemi gerçekleştirileceğinde bunun kontrolünü yapmalısınız, giriş yapıldı mı yapılmadı mı diye. Bu işlemleri oluşturduğunuz attribute'da yaptırabilir ya da fonksiyon halinde yazıp, login işleminde çağırabilirsiniz.

    Çalışmalarınızda kolaylıklar dilerim.

    8 Mayıs 2017 Pazartesi 07:06
    Moderatör
  • Sana önerim  bir   Custom Login Attribute yazman. Eski bir projemde uygulamıştım...
    internetten çok fazla kaynak yok Custom Login Attribute hakkında bilgi verebilirmisin mantık olarak nasıl oluyor

    Ömer ÖRNEK

    8 Mayıs 2017 Pazartesi 07:09
  • Merhaba,

    @Adem Güney Bey'in belirttiği Custom Attribute bu noktada işinize yarayacaktır.

    Kişi login olduğunda bunu bir yerde tutmanız gerekli, veritabanı,txt,xml,json vs. ve her login işlemi gerçekleştirileceğinde bunun kontrolünü yapmalısınız, giriş yapıldı mı yapılmadı mı diye. Bu işlemleri oluşturduğunuz attribute'da yaptırabilir ya da fonksiyon halinde yazıp, login işleminde çağırabilirsiniz.

    Çalışmalarınızda kolaylıklar dilerim.

    cevabınız için teşekkür ederim,

    login olan kişinin sadece t.c. kimlik numarasını session ile zaten tutuyorum, buradan yola çıkarak nasıl bir yol izlemeliyim


    Ömer ÖRNEK

    8 Mayıs 2017 Pazartesi 07:25
  • Merhaba,

    Eğer bilgileri Session'da tutuyorsanız, alışveriş sepeti mantığı ile sorununuzu çözebilirsiniz. Sepet yapılırken, ürün ekleme isteği yollandığında önce sepette olup olmadığı kontrol edilir, yoksa eklenir, varsa ürün adeti kadar artırılır.

    Sizin yapmanız gereken de benzeri işlem. Bir liste halinde giriş yapan kullanıcıları Session'da saklayıp, yeni giriş isteği olduğunda listeyi kontrol ettirmeniz. (giriş yapmışmı diye) Eğer giriş yapmadıysa, listeye eklensin, giriş yaptıysa false değer döndürsün ki işlem gerçekleşmesin.

    Örnek olarak;

     class IsUserOnlineControl
        {
            bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = HttpContext.Current.Session["OnlineUsers"] as List<string>;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    return true; 
    ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz. } } bool IsUserOnline(string tcKimlikNo) { List<string> OnlineUsers = HttpContext.Current.Session["OnlineUsers"] as List<string>; bool state = true; for (int i = 0; i < OnlineUsers.Count(); i++) { if (OnlineUsers[i].Equals(tcKimlikNo)) { state = false; break; } } return state; } }

    Çalışmalarınızda kolaylıklar dilerim.

    • Yanıt Olarak İşaretleyen omrornk 8 Mayıs 2017 Pazartesi 11:00
    8 Mayıs 2017 Pazartesi 07:46
    Moderatör
  • hocam bu örnek kodu class olarak projeme eklediğimde, login.aspx sayfasından giriş yapan kişiyi default.aspx sayfasında kontrol ettireceğim online mı değilmi diye peki default.aspx sayfasında bu kontrolü nasıl yaptıracağım.

    Ömer ÖRNEK

    8 Mayıs 2017 Pazartesi 11:16
  • Merhaba,

    Kullanıcı üye girişi yaptığı esnada, UserLoginCreate methodunu çağırırsanız, Session'da tutulan listeye TcKimlikNo bilgisi eklenecek. Dolayısı ile istediğiniz herhangi bir sayfada, IsUserOnline methodunu çağırarak online olup olmadığını öğrenebilirsiniz.

    Örn.

    if(IsUserOnline("11111111111"))
    {
    //Online ise yapılacak işlemler
    }
    else
    {
    //Online değil ise yapılacak işlemler
    }

    Burada dikkat edilmesi gereken en önemli nokta, kullanıcı çıkış yaptığında Session'daki listeden o kullanıcıya ait TcKimlikNo bilgisinin silinmesi. Bunun için oluşturduğumuz Class'ta bir method oluşturup, çıkış esnasında onu çalıştırabilirsiniz.

    Eğer yapmakta zorlanırsanız bu topic altında yorum atın, yardımcı olayım.

    Çalışmalarınızda kolaylıklar dilerim.

    8 Mayıs 2017 Pazartesi 11:20
    Moderatör
  • Merhaba,

    Kullanıcı üye girişi yaptığı esnada, UserLoginCreate methodunu çağırırsanız, Session'da tutulan listeye TcKimlikNo bilgisi eklenecek. Dolayısı ile istediğiniz herhangi bir sayfada, IsUserOnline methodunu çağırarak online olup olmadığını öğrenebilirsiniz.

    Örn.

    if(IsUserOnline("11111111111"))
    {
    //Online ise yapılacak işlemler
    }
    else
    {
    //Online değil ise yapılacak işlemler
    }

    Burada dikkat edilmesi gereken en önemli nokta, kullanıcı çıkış yaptığında Session'daki listeden o kullanıcıya ait TcKimlikNo bilgisinin silinmesi. Bunun için oluşturduğumuz Class'ta bir method oluşturup, çıkış esnasında onu çalıştırabilirsiniz.

    Eğer yapmakta zorlanırsanız bu topic altında yorum atın, yardımcı olayım.

    Çalışmalarınızda kolaylıklar dilerim.

    Hocam vaktiniz olursa bugün bakma şansınız var mı? acaba

    Ömer ÖRNEK

    9 Mayıs 2017 Salı 05:26
  • Merhabalar,

    Yaşadığınız bir problem varsa, bu konu ile ilgili ise bu başlık altına, değil ise yeni bir topic başlatarak yazarsanız, size yardımcı olmaktan memnuniyet duyarım.

    Çalışmalarınızda kolaylıklar dilerim.

    9 Mayıs 2017 Salı 08:01
    Moderatör
  • Merhabalar,

    Yaşadığınız bir problem varsa, bu konu ile ilgili ise bu başlık altına, değil ise yeni bir topic başlatarak yazarsanız, size yardımcı olmaktan memnuniyet duyarım.

    Çalışmalarınızda kolaylıklar dilerim.

    Hocam size teamviewer bağlantısı versem bağlanarak yardımcı olabilirmisiniz


    Ömer ÖRNEK

    9 Mayıs 2017 Salı 09:34
  • Merhaba,

    MSDN Forumların amacı, geliştiricilerin birbirine yardımcı olması ve bu yardımlardan tüm forum üyelerinin faydalanması. Size TeamViewer ile yardımcı olursam, buradaki diğer arkadaşlara haksızlık yapmış olurum zira herkese tek tek bağlantı kurma şansım olmayacaktır. Bundan dolayı, yaşadığınız problemi yazarsanız, cevaplarından herkes faydalanmış olur.

    Kolay gelsin

    9 Mayıs 2017 Salı 09:56
    Moderatör
  • anladım hocam haklısınız,

    o zaman ben sorunumu söyleyeyim, söylediğiniz class ile 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace Sinaline
    {
        public class OnlineUserControl
        {
            bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = HttpContext.Current.Session["PersonelGirisi"] as List<string>;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    return true;
                    ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz.
                }
            }
            bool IsUserOnline(string tcKimlikNo)
            {
                List<string> OnlineUsers = HttpContext.Current.Session["PersonelGirisi"] as List<string>;
                bool state = true;
                for (int i = 0; i < OnlineUsers.Count(); i++)
                {
                    if (OnlineUsers[i].Equals(tcKimlikNo))
                    {
                        state = false;
                        break;
                    }
                }
                return state;
            }
        }
    }
    

    şeklinde düzenledim

    bu class ı default.aspx sayfamda nasıl çağıracağımki aşağıdaki kodu çalıştırayım,

    if(IsUserOnline("11111111111"))
    {
    //Online ise yapılacak işlemler
    }
    else
    {
    //Online değil ise yapılacak işlemler
    }


    Ömer ÖRNEK

    9 Mayıs 2017 Salı 10:13
  • Merhaba,

    OnlineUserControl ouc = new OnlineUserControl(); ///Oluşturduğumuz class'ın bir instance'ını alıyoruz.
    if(ouc.IsUserOnline("11111111111"))
    {
    //Online ise yapılacak işlemler } else {
    //Online değil ise yapılacak işlemler }

    Çalışmalarınızda kolaylıklar dilerim

    9 Mayıs 2017 Salı 10:41
    Moderatör
  • Merhaba,

    OnlineUserControl ouc = new OnlineUserControl(); ///Oluşturduğumuz class'ın bir instance'ını alıyoruz.
    if(ouc.IsUserOnline("11111111111"))
    {
    //Online ise yapılacak işlemler } else {
    //Online değil ise yapılacak işlemler }

    Çalışmalarınızda kolaylıklar dilerim

    OnlineUserControl ouc = new OnlineUserControl(); // instance yi alıdığım halde aşağıdaki kalın yazılı yer altı çizili oluyor sorun nedir acaba

    if (ouc.IsUserOnline("PersonelGirisi"))


    Ömer ÖRNEK

    9 Mayıs 2017 Salı 12:11
  • Class'ın içerisindeki IsUserOnline methodunun access modifiers'ını Public yaparsanız sorununuz çözülür. Kısacası adının başına public koymanız yeterli. "public bool IsUserOnline"

    Bir de bu konulara geçmeden önce, Object Oriented Programming'i öğrenmenizi tavsiye ederim. Zira, buralarda takılırsanız, proje ilerledikçe çok problem yaşayabilirsiniz.

    Eğer sorununuz çözüldü ise, Yanıt Olarak İşaretler misiniz?

    Çalışmalarınızda kolaylıklar dilerim.


    • Yanıt Olarak İşaretleyen omrornk 9 Mayıs 2017 Salı 12:37
    9 Mayıs 2017 Salı 12:19
    Moderatör
  • hocam söylediklerinizi yaptım sorun görünmüyor ama çalıştırdığımda tc ile şifre girdiğimde aşağıdaki IsUserOnline methodunda for döngüsünde değer boş olamaz hata olarak dönüyor, 


    Ömer ÖRNEK

    9 Mayıs 2017 Salı 13:48
  • Merhaba,

    Kodları projenize uygun şekilde düzenlemeniz gerekmekte. Şu an, mevcut session üzerinden işlem yaptırılıyor. İlk başa bir kontrol daha yazmalısınız, eğer session null ise yeni session oluştur, var ise mevcut session'a ata diye. 

    Null değer döndürmesinin nedeni, Session oluşturmadan atama yapılması.

    Çalışmalarınızda kolaylıklar dilerim.

    9 Mayıs 2017 Salı 14:07
    Moderatör
  • Merhaba,

    Kodları projenize uygun şekilde düzenlemeniz gerekmekte. Şu an, mevcut session üzerinden işlem yaptırılıyor. İlk başa bir kontrol daha yazmalısınız, eğer session null ise yeni session oluştur, var ise mevcut session'a ata diye. 

    Null değer döndürmesinin nedeni, Session oluşturmadan atama yapılması.

    Çalışmalarınızda kolaylıklar dilerim.

            OnlineUserControl kontrol = new OnlineUserControl();
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["KULLANICI_TC_NO"] != null)
                {
                    lblKontrol.Text = HttpContext.Current.Session["KULLANICI_TC_NO"].ToString();
    
                    if (kontrol.IsUserOnline(lblKontrol.Text))
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "ONLİNE KULLANICI";
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
                    else
                    {
                        //Online değil ise yapılacak işlemler
                    }
                }
                else
                {
                    lblModalTitle.Text = "UYARI";
                    lblModalBody.Text = "ONLİNE KULLANICI";
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                }
            }
    

    yukarıdaki kodlarım login sonrası default.aspx.cs load kondlarım,

    aşağıdaki kodlarım ise class kodlarım

        public class OnlineUserControl
        {
            public bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = HttpContext.Current.Session["KULLANICI_TC_NO"] as List<string>;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    return true; ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz.
                }
            }
    
            public bool IsUserOnline(string tcKimlikNo)
            {
                List<string> OnlineUsers = HttpContext.Current.Session["KULLANICI_TC_NO"] as List<string>;
                bool state = true;
                for (int i = 0; i < OnlineUsers.Count(); i++)
                {
                    if (OnlineUsers[i].Equals(tcKimlikNo))
                    {
                        state = false;
                        break;
                    }
                }
                return state;
            }
        }
    
    yukarıdaki kodlara göre hatayı nerede yapıyorum,



    Ömer ÖRNEK

    9 Mayıs 2017 Salı 15:50
  • Oluşturduğumuz class içerisinde session null ise session oluştur değil ise mevcut sessiondaki bilgileri tut işini yapacak bir fonksiyon yazabilirsiniz. Böylece session null değer döndürmez. 

    9 Mayıs 2017 Salı 16:38
    Moderatör
  • Oluşturduğumuz class içerisinde session null ise session oluştur değil ise mevcut sessiondaki bilgileri tut işini yapacak bir fonksiyon yazabilirsiniz. Böylece session null değer döndürmez. 

        public class OnlineUserControl
        {
            public bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = HttpContext.Current.Session["KULLANICI_TC_NO"] as List<string>;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    return true; ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz.
                }
            }
    
            public bool IsUserOnline(string tcKimlikNo)
            {
                List<string> OnlineUsers = HttpContext.Current.Session["KULLANICI_TC_NO"] as List<string>;
                bool state = true;
                if (HttpContext.Current.Session["KULLANICI_TC_NO"] == null)
                {
                    for (int i = 0; i < OnlineUsers.Count(); i++)
                    {
                        if (OnlineUsers[i].Equals(tcKimlikNo))
                        {
                            state = false;
                            break;
                        }
                    }
                }
                else
                {
                    //
                }
                return state;
            }
        }

    Yukarıdaki şekilde yaptım null değer dönmüyor, ama birden fazla girişi denememde değişen bir şey olmuyor girişi engellemiyor


    Ömer ÖRNEK


    • Düzenleyen omrornk 9 Mayıs 2017 Salı 19:40
    9 Mayıs 2017 Salı 17:15
  • class IsUserOnlineControl
        {
    private List<string> _onlineUsers;
    private List<string> _OnlineUsers
    {
    get
    {
    if(HttpContext.Current.Session["OnlineUsers"]==null)
    {
    _onlineUsers = new List<string>();
    HttpContext.Current.Session["OnlineUsers"] = _onlineUsers;
    }
    else
    {
    _onlineUsers = HttpContext.Current.Session["OnlineUsers"] as List<string>;
    } return _onlineUsers; } } bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir. { List<string> OnlineUsers = _OnlineUsers;//Session'da tutulan liste alınır. if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner. { return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz. } else { OnlineUsers.Add(tcKimlikNo); HttpContext.Current.Session["OnlineUsers"]=OnlineUsers; return true; ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz. } } bool IsUserOnline(string tcKimlikNo) { List<string> OnlineUsers = _OnlineUsers; bool state = true; for (int i = 0; i < OnlineUsers.Count(); i++) { if (OnlineUsers[i].Equals(tcKimlikNo)) { state = false; break; } } return state; } }

    Size bahsetmiş olduğum değişiklik yukarıdaki kodlarda mevcut, kısa olarak açıklamasını yapayım;

    Öncelikle bir property oluşturup, Session'dan gelen listeyi orada kontrol ettik. Session'dan gelen bilgi null ise yani liste oluşturulmamış ise, oluşturulmasını ve Session'a atılmasını istedik.(if) Eğer, liste oluşturulmuş ise yani Session null değilse, Session'daki listeyi, property'e set edip, return ettik ki diğer methodlarımızda kullanırken, Session'dan gelen listeyi tek bir yerde kontrol edebilelim.

    Methodlardaki değişikliklere gelince;

    HttpContext.Current.Session["OnlineUsers"] yazarak aldığımız liste bilgilerini, direkt yazdığımız property'den aldık (_OnlineUsers)

    Şu anda, sorunsuz bir şekilde çalışıyor olması lazım. 

    Çalışmalarınızda kolaylıklar dilerim.

    9 Mayıs 2017 Salı 21:16
    Moderatör
  • Hocam olmadı size kodlarımı paylaşıyorum kontrol eder misiniz nerede hata yapıyorum

    Login.aspx kodlarım

                                        <asp:TextBox ID="txtKullaniciAdi" runat="server" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Kullanıcı Adınız';}">16607013060</asp:TextBox>
                                        <asp:TextBox ID="txtParola" runat="server" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Parolanız';}" >2533</asp:TextBox>
                                        <asp:Button ID="btnGirisYap" runat="server" Text="Giriş Yap" OnClick="btnGirisYap_Click" />
    

    login.aspx.cs

            protected void btnGirisYap_Click(object sender, EventArgs e)
            {
                if (String.IsNullOrWhiteSpace(txtKullaniciAdi.Text) || String.IsNullOrWhiteSpace(txtParola.Text))
                {
                    lblModalTitle.Text = "UYARI";
                    lblModalBody.Text = "LÜTFEN KULLANICI ADINIZI VE PAROLANIZI GİRİNİZ...";
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                }
                else
                {
                    try
                    {
                        fnk.Baglanti();
                        string sql = "SELECT * FROM UYELER WHERE TCNO=@TCNO AND PAROLA=@PAROLA";
                        OleDbParameter prms1 = new OleDbParameter("@TCNO", txtKullaniciAdi.Text);
                        OleDbParameter prms2 = new OleDbParameter("@PAROLA", txtParola.Text);
                        OleDbCommand cmd = new OleDbCommand(sql, fnk.Baglanti());
                        cmd.Parameters.Add(prms1);
                        cmd.Parameters.Add(prms2);
                        DataTable dt = new DataTable();
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        da.Fill(dt);
                        OleDbDataReader dr = cmd.ExecuteReader();
                        if (dr.Read())
                        {
                            lblOnayDurumu.Text = dr["ONAY_DRM"].ToString();
                            lblGirisYapanAdi.Text = dr["ADI"].ToString();
                            lblGirisYapanSoyadi.Text = dr["SOYADI"].ToString();
                            lblKontrol.Text = txtKullaniciAdi.Text;
                        }
    
                        if (dt.Rows.Count > 0)
                        {
                                Session.Add("KULLANICI_TC_NO", txtKullaniciAdi.Text);
                                Response.Redirect("AnaSayfa/Default.aspx");
                        }
                        else
                        {
                            lblModalTitle.Text = "UYARI";
                            lblModalBody.Text = "KULLANICI ADINIZ YADA PAROLANIZ HATALI";
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                        }
                    }
                    catch (Exception hata)
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "VERİTABANI İLE BAĞLANTI KURULAMADI\n\r" + hata;
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
    
                }
                fnk.BaglantiClose();
            }
    

    login aspx te tc kimlik numarası ile giriş yapılınca session olarak tc kimlik numarasını alıyorum, AnaSayfa/Default.aspx sayfasına yönlendiriyorum, buraya kadar sıkıntı yok

    AnaSayfa/Default.aspx

        <form id="form1" runat="server">
            <div class="modal extended-modal fade no-display" id="Uyari" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                            <h4 class="modal-title">
                                <asp:Label ForeColor="Red" ID="lblModalTitle" runat="server" Text=""></asp:Label></h4>
                        </div>
                        <div class="modal-body">
                            <asp:Label ForeColor="Red" ID="lblModalBody" runat="server" Text=""></asp:Label>
                        </div>
                        <div class="modal-footer">
                            <button runat="server" id="btnModalKapat" class="btn btn-info" data-dismiss="modal" aria-hidden="true">Kapat</button>
                        </div>
                    </div>
                </div>
            </div>
        <div>
    
        </div>
        </form>
    

    AnaSayfa/Default.aspx.cs

            DBFonksiyon fnk = new DBFonksiyon();
            OnlineUserControl ouc = new OnlineUserControl();
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["KULLANICI_TC_NO"] != null)
                {
                    if (ouc.IsUserOnline(HttpContext.Current.Session["KULLANICI_TC_NO"].ToString()))
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "ONLİNE KULLANICI";
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
                    else
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "KULLANICI ONLİNE DEĞİL";
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
                }
                else
                {
                    Response.Redirect("../Default.aspx");
                }
            }
    

    giriş yaptıktan sonra bu AnaSayfa/Default.aspx sayfası ONLİNE KULLANIC şeklinde uyarı ile açılıyor, ikinci bir girişi yaptığımda yine aynı uyarı ile açılıyor,

    aşağıdaki kod ise OnlineUserControl.cs

            private List<string> _onlineUsers;
            private List<string> _OnlineUsers
            {
                get
                {
                    if (HttpContext.Current.Session["KULLANICI_TC_NO"] == null)
                    {
                        _onlineUsers = new List<string>();
                        HttpContext.Current.Session["KULLANICI_TC_NO"] = _onlineUsers;
                    }
                    else
                    {
                        _onlineUsers = HttpContext.Current.Session["KULLANICI_TC_NO"] as List<string>;
                    }
                    return _onlineUsers;
                }
            }
            public bool UserLoginCreate(string tcKimlikNo) //Kullanıcı giriş yapmak istediğinde bu methoda gelir daha önce giriş yapıp yapmadığı kontrol edilir.
            {
                List<string> OnlineUsers = _OnlineUsers;//Session'da tutulan liste alınır.
                if (IsUserOnline(tcKimlikNo))//Kayıt varmı diye oluşturduğumuz fonksiyona gider, eğer kayıt varsa false yoksa true değer döner.
                {
                    return false; //Kullanıcı sisteme giriş yapmış demektir, bu durumda false değer döndürürüz.
                }
                else
                {
                    OnlineUsers.Add(tcKimlikNo);
                    HttpContext.Current.Session["KULLANICI_TC_NO"] = OnlineUsers;
                    return true;
                    ///Kullanıcı giriş yapmamış demektir, bu durumda session'da tuttuğumuz listeye ekleriz ve true değer return ederiz.
                }
            }
            public bool IsUserOnline(string tcKimlikNo)
            {
                List<string> OnlineUsers = _OnlineUsers;
                bool state = true;
                if (HttpContext.Current.Session["KULLANICI_TC_NO"] == null)
                {
                    for (int i = 0; i < OnlineUsers.Count(); i++)
                    {
                        if (OnlineUsers[i].Equals(tcKimlikNo))
                        {
                            state = false;
                            break;
                        }
                    }
                }
                else
                {
                    //
                }
                return state;
            }
    

    sistemi çalıştırdığım zaman AnaSayfa/Default.aspx sayfasına yönlendirildiğinde ONLİNE KULLANICI uyarısı alıyorum, ikinci defa girdiğimde yine aynı uyarıyı alıyorum yukarıdaki kodlarda hatayı nerede yapıyorum acaba yardımcı olurmusunuz


    Ömer ÖRNEK

    10 Mayıs 2017 Çarşamba 10:47
  • Kullanıcı giriş yaparken, veritabanı doğrulaması vs. yaptığınız bölümün kodlarını paylaşır mısınız?
    10 Mayıs 2017 Çarşamba 11:23
    Moderatör
  • Kullanıcı giriş yaparken, veritabanı doğrulaması vs. yaptığınız bölümün kodlarını paylaşır mısınız?
            protected void btnGirisYap_Click(object sender, EventArgs e)
            {
                if (String.IsNullOrWhiteSpace(txtKullaniciAdi.Text) || String.IsNullOrWhiteSpace(txtParola.Text))
                {
                    lblModalTitle.Text = "UYARI";
                    lblModalBody.Text = "LÜTFEN KULLANICI ADINIZI VE PAROLANIZI GİRİNİZ...";
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                }
                else
                {
                    try
                    {
                        fnk.Baglanti();
                        string sql = "SELECT * FROM UYELER WHERE TCNO=@TCNO AND PAROLA=@PAROLA";
                        OleDbParameter prms1 = new OleDbParameter("@TCNO", txtKullaniciAdi.Text);
                        OleDbParameter prms2 = new OleDbParameter("@PAROLA", txtParola.Text);
                        OleDbCommand cmd = new OleDbCommand(sql, fnk.Baglanti());
                        cmd.Parameters.Add(prms1);
                        cmd.Parameters.Add(prms2);
                        DataTable dt = new DataTable();
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        da.Fill(dt);
                        OleDbDataReader dr = cmd.ExecuteReader();
                        if (dr.Read())
                        {
                            lblOnayDurumu.Text = dr["ONAY_DRM"].ToString();
                            lblGirisYapanAdi.Text = dr["ADI"].ToString();
                            lblGirisYapanSoyadi.Text = dr["SOYADI"].ToString();
                            lblKontrol.Text = txtKullaniciAdi.Text;
                        }
    
                        if (dt.Rows.Count > 0)
                        {
                            if (lblOnayDurumu.Text != "1") // Onaylı
                            {
    
                            }
                            else
                            {
                                GirisYapanPersonelTC = txtKullaniciAdi.Text;
                                GirisYapanAd = lblGirisYapanAdi.Text;
                                GirisYapanSoyad = lblGirisYapanSoyadi.Text;
    
                                Session.Add("KULLANICI_TC_NO", txtKullaniciAdi.Text);
                                Response.Redirect("AnaSayfa/Default.aspx");
                            }
    
                        }
                        else
                        {
                            lblModalTitle.Text = "UYARI";
                            lblModalBody.Text = "KULLANICI ADINIZ YADA PAROLANIZ HATALI";
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                        }
                    }
                    catch (Exception hata)
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "VERİTABANI İLE BAĞLANTI KURULAMADI\n\r" + hata;
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
    
                }
                fnk.BaglantiClose();
            }
    



    Ömer ÖRNEK

    10 Mayıs 2017 Çarşamba 11:25
  • Kullanıcı giriş yaparken, veritabanı doğrulaması vs. yaptığınız bölümün kodlarını paylaşır mısınız?

            protected void btnGirisYap_Click(object sender, EventArgs e)
            {
                if (String.IsNullOrWhiteSpace(txtKullaniciAdi.Text) || String.IsNullOrWhiteSpace(txtParola.Text))
                {
                    lblModalTitle.Text = "UYARI";
                    lblModalBody.Text = "LÜTFEN KULLANICI ADINIZI VE PAROLANIZI GİRİNİZ...";
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                }
                else
                {
                    try
                    {
                        fnk.Baglanti();
                        string sql = "SELECT * FROM UYELER WHERE TCNO=@TCNO AND PAROLA=@PAROLA";
                        OleDbParameter prms1 = new OleDbParameter("@TCNO", txtKullaniciAdi.Text);
                        OleDbParameter prms2 = new OleDbParameter("@PAROLA", txtParola.Text);
                        OleDbCommand cmd = new OleDbCommand(sql, fnk.Baglanti());
                        cmd.Parameters.Add(prms1);
                        cmd.Parameters.Add(prms2);
                        DataTable dt = new DataTable();
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        da.Fill(dt);
                        OleDbDataReader dr = cmd.ExecuteReader();
                        if (dr.Read())
                        {
                            lblOnayDurumu.Text = dr["ONAY_DRM"].ToString();
                            lblGirisYapanAdi.Text = dr["ADI"].ToString();
                            lblGirisYapanSoyadi.Text = dr["SOYADI"].ToString();
                            lblKontrol.Text = txtKullaniciAdi.Text;
                        }
    
                        if (dt.Rows.Count > 0)
                        {
                            if (lblOnayDurumu.Text != "1") // Onaylı
                            {
    
                            }
                            else
                            {
                                GirisYapanPersonelTC = txtKullaniciAdi.Text;
                                GirisYapanAd = lblGirisYapanAdi.Text;
                                GirisYapanSoyad = lblGirisYapanSoyadi.Text;
    
                                Session.Add("KULLANICI_TC_NO", txtKullaniciAdi.Text);
                                Response.Redirect("AnaSayfa/Default.aspx");
                            }
    
                        }
                        else
                        {
                            lblModalTitle.Text = "UYARI";
                            lblModalBody.Text = "KULLANICI ADINIZ YADA PAROLANIZ HATALI";
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                        }
                    }
                    catch (Exception hata)
                    {
                        lblModalTitle.Text = "UYARI";
                        lblModalBody.Text = "VERİTABANI İLE BAĞLANTI KURULAMADI\n\r" + hata;
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Uyari", "$('#Uyari').modal();", true);
                    }
    
                }
                fnk.BaglantiClose();
            }



    Ömer ÖRNEK

    Merhaba,

    Session tanımlamasını hatalı yaptığınız için çalışmıyor muhtemelen;

     Session.Add("KULLANICI_TC_NO", txtKullaniciAdi.Text);

    Class içerisinde Session işlemleri için gerekli methodları oluşturmuştuk.

    Yukarıdaki kodun yerine oluşturduğumuz class'ın içerisindeki UserLoginCreate methodunu çağırmalısınız.

    Örnek;

    UserLoginCreate(txtKullaniciAdi.Text);
    /*Biz Session'da generic list olarak tutuyoruz kayıtları ancak sizin tanımlamanızda
    tek bir string değer ataması yapılmış, dolayısı ile kontrol esnasında veriler eşleşmez.*/

    10 Mayıs 2017 Çarşamba 11:48
    Moderatör
  • hocam anasayfa/default.aspx sayfasındada bir değişiklik yapmam gerekiyormu


    Ömer ÖRNEK

    10 Mayıs 2017 Çarşamba 12:02