Şimdi Ara

Çoklu Login Engelleme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
5
Cevap
0
Favori
410
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar bir kafe programım var.Login sistemi var.Kafe programı 1 TL ile çalışan sistemi çalıştırıyo.Üyelik sistemi sayesinde müşteriler çıkış yaptığında , kalan sürelerini bir sonraki login yaptıklarında kullanabiliyo.Ana bilgisayara MsSql kurdum ve ağdan paylaşıma verdim.Kafe programı çıkış yapıldığında kalan süreyi veritabanına kaydediyo.Tekrar login yaptığında veritabanındaki süreyi kafe programına aktarıp , veritabanındaki süreyi sıfırlıyo.Ancak sorun şu ki , müşteriler aynı üyelik bilgileri ile birden fazla login yapabiliyo.Acaba diyorum birinin kalan süresini aynı anda login yaparak hepsi kullanabiliyo mu?Bu konuda şüpheliyim.

    Çareyi üye tablosuna isLogin adında bir boolean satır eklemekle düşündüm.Login olduğunda isLogin true olsun , başka kimse giremesin.Çıkış yapınca ya da süre bitince de isLogin false olsun ki tekrar giriş yapabilsin.Ancak şöyle bir sorun var.Eğer bilgisayara kitlenirse ve reset atılırsa, isLogin true kalacak ve kişi bir daha login olamıyacak.Nasıl çözecez bu işi?Aklına bir fikir gelen var mı?







  • Surenin bittigini hesaplayan mekanizma session mi? Zaten bir session i olan kullanici login olamasin ya da ilk once login olan kullanicinin session i invalide olsun.

    Ip adresi de tutabilirsin. 192.168.1.116 dan login olduysa baska ip den olamasin ya da tek bir ip den olabilsin yalnizca. Database e su anda login olup olmadigini yazmaya gerek yok, lastLoginTime gibi bir timestamp daha kullanisli olur. Sistem tam olarak nasil calisiyor bilmiyorum ama eger periyodik olarak ping aliyorsan makinelerden lastPingTime gibi bir sey de ekleyebilirsin. Kesinti olursa devaminda kim login kim degil anlamak icin.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Mephalay

    Surenin bittigini hesaplayan mekanizma session mi? Zaten bir session i olan kullanici login olamasin ya da ilk once login olan kullanicinin session i invalide olsun.

    Ip adresi de tutabilirsin. 192.168.1.116 dan login olduysa baska ip den olamasin ya da tek bir ip den olabilsin yalnizca. Database e su anda login olup olmadigini yazmaya gerek yok, lastLoginTime gibi bir timestamp daha kullanisli olur. Sistem tam olarak nasil calisiyor bilmiyorum ama eger periyodik olarak ping aliyorsan makinelerden lastPingTime gibi bir sey de ekleyebilirsin. Kesinti olursa devaminda kim login kim degil anlamak icin.

    Hay Allah razı olsun senden. Ben bunu niye düşünemedim ki? Şu kafe programını timestamp'sız yapmıştım. Sayende de yine timestampsız bir çözüm oluştu kafamda. Timestamp olayına girersem programı baştan yazmam gerekecekti. Ama şimdi basit bir şekilde halledicem.



    Ben ip ile değil, bilgisayar adı ile yapıcam. Veritabanına isLogin ve bilgisayarAdi isimli 2 tane yeni sütun ekliycem. Üye çıkış yaptığında ya da süresi bittiğinde isLogin false ve bilgisayarAdi null olacak. Eğer üye bilgisayarı resetlerse ve isLogin true kalırsa, aynı zamanda son giriş yaptığı bilgisayar da saklı kalacak. Tekrar giriş yapmaya kalktığında isLogin true olduğu için bir uyarı mesajı göndericem." Son giriş yaptığınız 3 numaralı bilgisayardan çıkış yapmadığınız için, bir kereliğine yine 3 numaralı bilgisayardan giriş yapmanız gerekmektedir." Böylece çoklu girişin önüne geçebilirim.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: kingman29


    quote:

    Orijinalden alıntı: Mephalay

    Surenin bittigini hesaplayan mekanizma session mi? Zaten bir session i olan kullanici login olamasin ya da ilk once login olan kullanicinin session i invalide olsun.

    Ip adresi de tutabilirsin. 192.168.1.116 dan login olduysa baska ip den olamasin ya da tek bir ip den olabilsin yalnizca. Database e su anda login olup olmadigini yazmaya gerek yok, lastLoginTime gibi bir timestamp daha kullanisli olur. Sistem tam olarak nasil calisiyor bilmiyorum ama eger periyodik olarak ping aliyorsan makinelerden lastPingTime gibi bir sey de ekleyebilirsin. Kesinti olursa devaminda kim login kim degil anlamak icin.

    Hay Allah razı olsun senden. Ben bunu niye düşünemedim ki? Şu kafe programını timestamp'sız yapmıştım. Sayende de yine timestampsız bir çözüm oluştu kafamda. Timestamp olayına girersem programı baştan yazmam gerekecekti. Ama şimdi basit bir şekilde halledicem.



    Ben ip ile değil, bilgisayar adı ile yapıcam. Veritabanına isLogin ve bilgisayarAdi isimli 2 tane yeni sütun ekliycem. Üye çıkış yaptığında ya da süresi bittiğinde isLogin false ve bilgisayarAdi null olacak. Eğer üye bilgisayarı resetlerse ve isLogin true kalırsa, aynı zamanda son giriş yaptığı bilgisayar da saklı kalacak. Tekrar giriş yapmaya kalktığında isLogin true olduğu için bir uyarı mesajı göndericem." Son giriş yaptığınız 3 numaralı bilgisayardan çıkış yapmadığınız için, bir kereliğine yine 3 numaralı bilgisayardan giriş yapmanız gerekmektedir." Böylece çoklu girişin önüne geçebilirim.

    Rica ederim ne demek, biraz kafa yorsak daha guzel yontemler de bulabiliriz.

    Dedigin mantikli geliyor, tek aklima gelen problem; eger ana makine bir sekilde giderse database de herkes islogin true olarak kalacak. Bu problemi de cozmek icin bence su anda login olan bilgisayarlarin listesini RAM'de tutup ( hic database e yazmadan ) ona gore islem yapmayi da dusunebilirsin. ( Bu senaryoda da ana makine yeniden hayatina geri dondugunde herkesin tekrar login olmasi gerekiyor, database de tutulmus olsaydi buna gerek kalmayacakti ) Gerci su anda senede 1 olacak bir olay icin sistemi gereksiz komplike hale getirmekten bahsediyorum muhtemelen ama, yine de aklima geldi yazayim : )

    Bir de baska bir sorun, makine degistirmek icin; yani 2 numaradaki adam kalkip 4 numaraya gecmek istedi, bunu yapmak icin adama hem 2'den hem de 4'ten login olmasini isteyeceksin yanilmiyorsam degil mi? Belki de bunun yerine daha kullanici dostu bir seyler dusunulebilir.



    < Bu mesaj bu kişi tarafından değiştirildi Mephalay -- 26 Ekim 2017; 13:20:44 >
    < Bu ileti tablet sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: Mephalay

    quote:

    Orijinalden alıntı: kingman29


    quote:

    Orijinalden alıntı: Mephalay

    Surenin bittigini hesaplayan mekanizma session mi? Zaten bir session i olan kullanici login olamasin ya da ilk once login olan kullanicinin session i invalide olsun.

    Ip adresi de tutabilirsin. 192.168.1.116 dan login olduysa baska ip den olamasin ya da tek bir ip den olabilsin yalnizca. Database e su anda login olup olmadigini yazmaya gerek yok, lastLoginTime gibi bir timestamp daha kullanisli olur. Sistem tam olarak nasil calisiyor bilmiyorum ama eger periyodik olarak ping aliyorsan makinelerden lastPingTime gibi bir sey de ekleyebilirsin. Kesinti olursa devaminda kim login kim degil anlamak icin.

    Hay Allah razı olsun senden. Ben bunu niye düşünemedim ki? Şu kafe programını timestamp'sız yapmıştım. Sayende de yine timestampsız bir çözüm oluştu kafamda. Timestamp olayına girersem programı baştan yazmam gerekecekti. Ama şimdi basit bir şekilde halledicem.



    Ben ip ile değil, bilgisayar adı ile yapıcam. Veritabanına isLogin ve bilgisayarAdi isimli 2 tane yeni sütun ekliycem. Üye çıkış yaptığında ya da süresi bittiğinde isLogin false ve bilgisayarAdi null olacak. Eğer üye bilgisayarı resetlerse ve isLogin true kalırsa, aynı zamanda son giriş yaptığı bilgisayar da saklı kalacak. Tekrar giriş yapmaya kalktığında isLogin true olduğu için bir uyarı mesajı göndericem." Son giriş yaptığınız 3 numaralı bilgisayardan çıkış yapmadığınız için, bir kereliğine yine 3 numaralı bilgisayardan giriş yapmanız gerekmektedir." Böylece çoklu girişin önüne geçebilirim.

    Rica ederim ne demek, biraz kafa yorsak daha guzel yontemler de bulabiliriz.

    Dedigin mantikli geliyor, tek aklima gelen problem; eger ana makine bir sekilde giderse database de herkes islogin true olarak kalacak. Bu problemi de cozmek icin bence su anda login olan bilgisayarlarin listesini RAM'de tutup ( hic database e yazmadan ) ona gore islem yapmayi da dusunebilirsin. ( Bu senaryoda da ana makine yeniden hayatina geri dondugunde herkesin tekrar login olmasi gerekiyor, database de tutulmus olsaydi buna gerek kalmayacakti ) Gerci su anda senede 1 olacak bir olay icin sistemi gereksiz komplike hale getirmekten bahsediyorum muhtemelen ama, yine de aklima geldi yazayim : )

    Bir de baska bir sorun, makine degistirmek icin; yani 2 numaradaki adam kalkip 4 numaraya gecmek istedi, bunu yapmak icin adama hem 2'den hem de 4'ten login olmasini isteyeceksin yanilmiyorsam degil mi? Belki de bunun yerine daha kullanici dostu bir seyler dusunulebilir.

    Benim kafe programı biraz garip oldu. Aslında olmaması gereken şekilde oldu. Ama çok kaynak kullanan, veritabanından sürekli veri çeken bir yapı değil gerekli zamanda veri çeken bir sistem oldu. Bi yönden bakarsak daha iyi ama aslında ters bir sistem oldu.



    Başlangıçta veritabanı yoktu. Sadece client programda timer çalışırken, para atıldığında süre ekleyip, süre bitince bilgisayarı kapatacak şekilde programladım. Sonra dedim ki müşteri bilgisayara reset attığında, kalan süresini kullanabilmesi için bir anabilgisayar programı yapmalıyım. Böylece her bilgisayara para atıldığında, ana programa mesaj olarak süre bilgisini gönderiyor ve client bilgisayara reset atıldığında, client ilk bağlandığı anda, ana bilgisayardan süre bilgisini alarak devam ediyor. Hem elektrik kesintisi gibi durumlarda, ana bilgisayarda, her bilgisayarın kalan süresi gözüküyor, para iadesi yapılabiliyor. Ancak bazı problemler yaşadım. Bazen bilgisayar resetlendiğinde, client connect olduğunda süre bilgisini alamıyor, tekrar reset atmak gerekebiliyordu.



    Aslında programa veritabanı olayını katmak istediğimde, önce ana bilgisayardaki program üzerinden yapmayı düşündüm. Ancak server client bağlantısında yaşadığım bu ufak problem yüzünden, ana bilgisayar programına güvenemedim. Ben de veritabanını ağa paylaşıma açıp, tek tek clientler üzerinden veritabanına erişim yapmayı uygun gördüm. Üye girişi falan hep clientler üzerinden yapılıyor. Ana bilgisayar programının vazifesi sadece bilgisayara reset atıldığında, kalan süreyi cliente göndermek. Eğer veritabanı işlemlerini server programı üzerinden yapsaydım, dediğin gibi login leri ram'de tutup, çok kolay bir şekilde halledebilirdim. Ancak madem ram'de tutamıyorum, o zaman bende veritabanına bilgisayarlar diye bir tablo oluşturup, tüm bilgisayar adlarını gireceğim bir bilgisayarAdi sütunu ve isLogin sütunu oluşturabilirim. Ancak yine de bilgisayara reset atıldığında, veritabanında o bilgisayarda login durumda kalacak. Belki ana programa login kontrol diye ek bir form yapıp, kimlerin hangi bilgisayarda login durumda gözüktüğünü gösteren bir ek yapabilirim. Böylece kafeci, login olamıyorum diyen müşteri olduğunda, hangi bilgisayarda giriş yapmış görünüyorsa, eğer o bilgisayarda başkası oturmuyorsa, müdahale edip, login durumunu false yapabilir. Ya da başka bi yerden login olmaya çalışıyorsa, şu bilgisayarda login durumunda gözüküyorsunuz, lütfen bir kereliğine tekrar aynı bilgisayardan login olunuz diye mesaj da yollayabiliriz. Böylece login kilidi kalkacaktır. Bu durum, sadece çıkış yapmadığı, ya da süresi bitmeden reset attığı durumda olacaktır. Ama başkası o bilgisayara login olmaya çalıştığında izin verebilirim. Böylece diğerinin de login kilidi açılmış olur. Ya da üyelik sistemi kullanmayan biri, hiç giriş yapmadan para atsa, yine veritabanında o bilgisayara guest girişi yapıldığını girebilirim. Böylece yine login kilidi açılmış olur.



    Aktarma olayına gelince, şu an çalışan sistem şu şekilde. Kişi login olup para attığında, sonra da çıkış yaptığında, kalan süresi veritabanında, kullanıcının oldupu satırda, kalan süre sutununa işleniyor. Başka bir bilgisayardan giriş yaptığında da veritabanından kalan süreyi alıp, cliente aktarıyor. Problemsiz çalışıyor.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.