Web Oturum Sonlandırma - Fikir Ve Tavsiye - ASP.NET
-
merhabalar üstadlar bir şey yapmak istiyorum ama nasıl yapabileceğim konusunda bilgim yetersiz geliyor. sizlerden ricam bu konuda bana yol gösterebilir misiniz ?
şimdi bir web sitesi düşünün. bu web sitesinde 4 adet sayfa var. 1,2,3,4 diye isimleri olsun. örnek olarak a kullanıcısı 1. sayfaya girdi. girdiği anda o sayfa artık onun olacak içerisinde işlemleri yapabilecek. a kullanıcısı içerideyken başka kim girerse girsin bu sayfaya şuanda bu sayfa kullanımda uyarısı verecek. taki a kullanıcısı çıkış yap derse. yada ana yönetim sayfasındaki kişi 1. sayfadaki a kullanıcısı atana kadar. 2.3.4 sayfalardada aynı işlem olacak. ve bunlarda aynı şekilde ister kendi istekleri ile istersede yönetici tarafından sonlandıralabilecek. önemli nokta şu kullanıcı diye hitap ettiğim a kullanıcısı bu sayfaya girdiğinde şifre mail vb hiç bir şey girmiyor. sadece o sayfaya ilk girdiyse o sayfa artık onun oluyor.
böyle bir yapı için nasıl bir yol izlemeliyim. sizlerden bir fikir istiyorum.
-
Aslında veritabanına ip veya uuid gibi bir id yazdırarak halledebilirsin ama kullanıcının çıktığını yakalaman problem olacaktır.
Socket ile çalışırsın problemini tam olarak çözersin
-
by_Tet bunu yazdı
Aslında veritabanına ip veya uuid gibi bir id yazdırarak halledebilirsin ama kullanıcının çıktığını yakalaman problem olacaktır.
Socket ile çalışırsın problemini tam olarak çözersin
id:pw authentication soz konusu degil, ben surekli socketi poollarsam ve kimsenin giremeyecegi bir sekilde isgal edersem ne olacak peki?
benim azami bir guesting sinirlamam olmasi mantikli olabilir belki sonraki 30 dakika icinde o ip ile tekrar alamam oturumu. baska da bir sey gelmedi aklima.
-
-
Uygulamanda 1 adet static ConcurrentDictionary olacak.
İnternet dünyasında cookie denen bir kavram var. Cookie nin olma sebebi senin siteni ziyaret eden kullanıcıları ayrıştırmak, işaretlemek, damgalamak. Bunları tanımak istiyorsun. O nedenle cookie ler ile kullanıcılar işaretleniyor.
Önce siteni ziyaret eden kişilere bir kimlik numarası ata. Bunu random sayılar kullanarak yap. Mesela hepimiz anasayfaya girdik. Site baksın cookie["kimlik numarası"] eğer boşsa bu defa git 50 karakter uzunluğunda bir rastgele sayı üret ve sonunada yıl + ay +gün+ saat+ dakika+ saniye ekle.
Böylece siteyi ziyaret eden her kullanıcının bir kimlik bilgisi oluşmuş oldu.
Diyelimki benim kimlik numarası ADF548S48-2021-04-10-09-36-54 olsun. 3 numaralı sayfaya giriş yapmak isteyeyim. ConcurrentDictionary den bakacaksın. 3 numaralı sayfa boş mu. Yani sözlükte key değeri 3 olan bir eleman var mı? Yoksa eğer, hemen sözlüğe sozluk.Add(3, new Info{ kimlik = "ADF548S48-2021-04-10-09-36-54", ExpirationDate = DateTime.Now.AddMinutes(10) }); Diyerek yeni kayıt gireceksin. Sözlükteki keyler sayfalarının numaraları, sözlükteki değerler ise senin kullanıcının bilgilerini tutan nesneler. Bu nesneler içinde kullanıcının kimlik bilgisi ve sayfayı son kullanma süresi olacak.
Başka bir kişi 3 numaralı sayfaya erişirse eğer, bu sefer kontrolünü yapacaksın. Sözlükten key değeri 3 olan elemanı getireceksin, bakacaksın erişmek isteyen kişi ile sozlukteki elemanın içindeki nesnenin kimlik bilgisi aynı mı? Ona göre sayfaya alacaksın veya almayacaksın. Eğer bir kişi erişmek istediğinde o sayfa dolu ise son kullanma tarihine bakacaksın. Geçmişse, sozlukten var olan kaydı silip, yeni kayıt ekleyeceksin.
Özetle 1 adet static sözlük ve cookie kullanarak algoritma kuracaksın. Bu kadar.
-
Hannibal_King bunu yazdı
Uygulamanda 1 adet static ConcurrentDictionary olacak.
İnternet dünyasında cookie denen bir kavram var. Cookie nin olma sebebi senin siteni ziyaret eden kullanıcıları ayrıştırmak, işaretlemek, damgalamak. Bunları tanımak istiyorsun. O nedenle cookie ler ile kullanıcılar işaretleniyor.
Önce siteni ziyaret eden kişilere bir kimlik numarası ata. Bunu random sayılar kullanarak yap. Mesela hepimiz anasayfaya girdik. Site baksın cookie["kimlik numarası"] eğer boşsa bu defa git 50 karakter uzunluğunda bir rastgele sayı üret ve sonunada yıl + ay +gün+ saat+ dakika+ saniye ekle.
Böylece siteyi ziyaret eden her kullanıcının bir kimlik bilgisi oluşmuş oldu.
Diyelimki benim kimlik numarası ADF548S48-2021-04-10-09-36-54 olsun. 3 numaralı sayfaya giriş yapmak isteyeyim. ConcurrentDictionary den bakacaksın. 3 numaralı sayfa boş mu. Yani sözlükte key değeri 3 olan bir eleman var mı? Yoksa eğer, hemen sözlüğe sozluk.Add(3, new Info{ kimlik = "ADF548S48-2021-04-10-09-36-54", ExpirationDate = DateTime.Now.AddMinutes(10) }); Diyerek yeni kayıt gireceksin. Sözlükteki keyler sayfalarının numaraları, sözlükteki değerler ise senin kullanıcının bilgilerini tutan nesneler. Bu nesneler içinde kullanıcının kimlik bilgisi ve sayfayı son kullanma süresi olacak.
Başka bir kişi 3 numaralı sayfaya erişirse eğer, bu sefer kontrolünü yapacaksın. Sözlükten key değeri 3 olan elemanı getireceksin, bakacaksın erişmek isteyen kişi ile sozlukteki elemanın içindeki nesnenin kimlik bilgisi aynı mı? Ona göre sayfaya alacaksın veya almayacaksın. Eğer bir kişi erişmek istediğinde o sayfa dolu ise son kullanma tarihine bakacaksın. Geçmişse, sozlukten var olan kaydı silip, yeni kayıt ekleyeceksin.
Özetle 1 adet static sözlük ve cookie kullanarak algoritma kuracaksın. Bu kadar.
onar dakikalık kitlemeler yerine realtime baglanti istiyorsun diyelim, aspnet'in modülleri muhakkak vardır websocket'e yönelik. Benzer mantığı izleyeceksin. Çerezler yerine socket connection idlerini kullanabilir ve disconnect olduğunda boşa çıkartabilirsin. Yine azami bir bağlantı süresi olur, örneğin 1 saat, clientta popup çıkar 1 dakikalık, "bağlantınızı devam ettirmek istiyor musunuz?" diye. 1 dakika içinde yanıt gelmezse yine boşa çıkartırsın o sayfayı.
Gibi gibi...
Ellerine sağlık yamyam kral.
-
end bunu yazdıHannibal_King bunu yazdı
Uygulamanda 1 adet static ConcurrentDictionary olacak.
İnternet dünyasında cookie denen bir kavram var. Cookie nin olma sebebi senin siteni ziyaret eden kullanıcıları ayrıştırmak, işaretlemek, damgalamak. Bunları tanımak istiyorsun. O nedenle cookie ler ile kullanıcılar işaretleniyor.
Önce siteni ziyaret eden kişilere bir kimlik numarası ata. Bunu random sayılar kullanarak yap. Mesela hepimiz anasayfaya girdik. Site baksın cookie["kimlik numarası"] eğer boşsa bu defa git 50 karakter uzunluğunda bir rastgele sayı üret ve sonunada yıl + ay +gün+ saat+ dakika+ saniye ekle.
Böylece siteyi ziyaret eden her kullanıcının bir kimlik bilgisi oluşmuş oldu.
Diyelimki benim kimlik numarası ADF548S48-2021-04-10-09-36-54 olsun. 3 numaralı sayfaya giriş yapmak isteyeyim. ConcurrentDictionary den bakacaksın. 3 numaralı sayfa boş mu. Yani sözlükte key değeri 3 olan bir eleman var mı? Yoksa eğer, hemen sözlüğe sozluk.Add(3, new Info{ kimlik = "ADF548S48-2021-04-10-09-36-54", ExpirationDate = DateTime.Now.AddMinutes(10) }); Diyerek yeni kayıt gireceksin. Sözlükteki keyler sayfalarının numaraları, sözlükteki değerler ise senin kullanıcının bilgilerini tutan nesneler. Bu nesneler içinde kullanıcının kimlik bilgisi ve sayfayı son kullanma süresi olacak.
Başka bir kişi 3 numaralı sayfaya erişirse eğer, bu sefer kontrolünü yapacaksın. Sözlükten key değeri 3 olan elemanı getireceksin, bakacaksın erişmek isteyen kişi ile sozlukteki elemanın içindeki nesnenin kimlik bilgisi aynı mı? Ona göre sayfaya alacaksın veya almayacaksın. Eğer bir kişi erişmek istediğinde o sayfa dolu ise son kullanma tarihine bakacaksın. Geçmişse, sozlukten var olan kaydı silip, yeni kayıt ekleyeceksin.
Özetle 1 adet static sözlük ve cookie kullanarak algoritma kuracaksın. Bu kadar.
onar dakikalık kitlemeler yerine realtime baglanti istiyorsun diyelim, aspnet'in modülleri muhakkak vardır websocket'e yönelik. Benzer mantığı izleyeceksin. Çerezler yerine socket connection idlerini kullanabilir ve disconnect olduğunda boşa çıkartabilirsin. Yine azami bir bağlantı süresi olur, örneğin 1 saat, clientta popup çıkar 1 dakikalık, "bağlantınızı devam ettirmek istiyor musunuz?" diye. 1 dakika içinde yanıt gelmezse yine boşa çıkartırsın o sayfayı.
Gibi gibi...
Ellerine sağlık yamyam kral.
Blade filminden aklıma gelmisti ondan koymuştum nicki :)) Hannibal Lecter dan gelme değil :)))
-
Uygulaman oop mantığına ters. mantıklı değil. Arkadaşların dediğide haklı, auth. olmadığı sürece sürekli saldırı altında meşgül olabilir.
Yinede cevap olarak; websocket'in hazır kütüphanesi SignalR ile real-time yaparsın. İnternette çokca örneğini bulursun.
-
end bunu yazdıby_Tet bunu yazdı
Aslında veritabanına ip veya uuid gibi bir id yazdırarak halledebilirsin ama kullanıcının çıktığını yakalaman problem olacaktır.
Socket ile çalışırsın problemini tam olarak çözersin
id:pw authentication soz konusu degil, ben surekli socketi poollarsam ve kimsenin giremeyecegi bir sekilde isgal edersem ne olacak peki?
benim azami bir guesting sinirlamam olmasi mantikli olabilir belki sonraki 30 dakika icinde o ip ile tekrar alamam oturumu. baska da bir sey gelmedi aklima.
E zaten böyle bir saldırı olmayacak gibi bir durum söz konusu değil ki?
İstenilen şey sayfaya yalnızca 1 kişi girebilmesi. Bu kişinin gerçek kişi olup olmaması tamamen ip/proxy kontrolüne bağlı, id:pw olunca da aynı şekilde üyelik oluşturulabilir.
Ancak mesele bu değil, sen socketi aynı bağlantı üzerinden poollayacaksın, bir başka sayfaya girdiğinde eski sayfa boşalacak yani aynı anda enfazla 1 sayfaya girebilmiş olacaksın.
Dersen ki sürekli farklı socketler ile poollarım, her durumdaki gibi ip adresi kontrol edilir.
Dersen ki adamın ip adresi sürekli değişiyor/aynı ip üzerinden birden fazla kişi girebilmeli; bu ve benzeri sorunların dibi yok. Ama bunlar sorun teşkil ediyor diye yapılamaz bir şey de değil. Socket her türlü sorunu çözüyor. Birden fazla girişlerde çapça koyarsın, socket üzerinden callback hashlersin iş biter
-
Valla ben aynısını php ve session ile yazmıştım. session true dönüyorsa, page status database tarafında 1 oluyor bu 1 true anlamında tabii, page status 1 olduğu sürece sayfaya başka kişi giriş yapamıyor, ana sayfaya yönleniyor. burada sorun şuydu sayfaya ilk giren kalabiliyordu eğer sayfa da refresh yaparsa onuda atıyordu
db kullanılmayacaksa Hannibal üstadın dediği static değişken ve kavramlar da iş görür eminim