Flood olaylarında Session kull
 
flood olayları çoğumuzun başını ağrıtmıştır.

bu konuda orayı burayı karıştırıp araştırma yaparken aklıma birşey geldi.

aslında bir yerlerden kopya çektim desem daha doğru olur.

bilirsiniz vbulletin forumlarda aram yaparken üstüste bir kaç aramadan sonra yavaş olun. şu kadar arma yapmışsınız.yeniden arama yapmak için şu kadar süre beklemelisiniz derler ;

veya daha basite indirgenmiş olarak ardınsıra bir foruma mesaj yazacağınızda az evvel mesaj yazmışsın ne bu acele gibi hem gıcık edici hem tetikleyici mesajlarla karşılaşırız : )
daha da acısı; bir sabah uyanmışızdır,gayet dinç bir şekilde kahvaltı neyin yapmadan len şu siteme bi bakayım ben harikayım be tripleriyle sitemize bakarız. birde ne görelim.. adamın biri yuzlerce mesaj bırakmış : ) sabahı şerifin hayrıyla bu floodları amele gibi birer birer sileriz artık.
neyse çok konuştum. konuya girelim.

------------------------
konuya başlamadan evvel uzun uzun anlatayım diyordum ama açıkcası sıkıldım : )
diyelimki gonderim adında bir sessionmuz olsun

session("gonderim" )

ve yaz.asp ile yazdim.asp adında iki sayfamız olsun.
kullanıcı yaz.asp sayfasından verileri yazdim.asp sayfasına post edecek

işte sessionumuz burda devreye girmeli.

session("gonderim" ) = session("gonderim" ) + 1
diye yazdim.asp sayfasının işlem sonuna koyalım.
kullanıcımız açtığı oturum boyunda her post edişinde session("gonderim" ) değeri bir artacaktır.
aslına bakarsanız artmayabilir.
niçin derseniz session("gonderim" ) i tanımladım ama farkındaysanız bir değer atamadım

yapmamız gereken oldukça basit.
iki seçeneğimiz var
ya yaz.asp sayfasına session("gonderim" )=1 diye eşlememizi ekleyeceğiz
yada
yukarıda izah ettiğim yerde session("gonderim" ) değerini
session("gonderim" ) ="" değerinden , yani Sıfırdan kurtaracağız.
if session("gonderim" )="" then
session("gonderim" ) = 1
else
session("gonderim" ) = session("gonderim" ) + 1
end if.

olayımız tamamdır.
şimdi yukarda söylediğim cümleyi kendimden emin bir şekilde tekrar edebilirim.

kullanıcımız açtığı oturum boyunda her post edişinde session("gonderim" ) değeri bir artacaktır.

evet, buraya kadar yazdklarım konuya vakıf olmayan arkadaşların daha iyi idrak etmesi içindi.

şimdi bu artışı nasıl kullanabiliriz. bildiğiniz üzere x kullanıcısının oturumu boyunda yaz.asp den yazdim.asp ye post ettiği konu sayısınca sessionumuz 1 artmakta.

olay oldukça basit.

ister yaz.asp sayfasına istersenizde yazdim.asp sayfasına şöyle bir tanım koymalıyız.
eğer x kullanıcısının session("gonderim" ) sayısı y sayısından fazla ise onu uyar, postunu kabul etme.
değilse kabul et.
ben yazdim.asp sayfasına koyayım..

If session("gonderim" )>5 then
Response.redirect("http://hadi sen biraz dinlen çok yoruldun" )
Else
-----------------------------------
belittiğim sessionun sayısı istediğimden az ise... postunu kabul et
form kontrolleri
veri tabanı islemleri
kullanıcıya postunun kabul edildiğine dair mesajj
ve ardından sessionumu +1 arttıran değer..
if session("gonderim" )="" then
session("gonderim" ) = 1
else
session("gonderim" ) = session("gonderim" ) + 1
end if.


-------------------------------------
End If

Gördüğünüz gibi,
kullanıcının oturumu boyunca yaz.asp den yazdim.asp ye gonderdiği içerik sayısı 5ten fazla ise onu uyardk. 5ten az ise postunu veri tabanımıza kaydettik.

olayı biraz daha geliştirelim. ve en baştada bahsettiğim gibi her seferinde bir arttırdığım sessionumu zaman mehumunuda ekleyerek kullanmak istiyorum.
datediff olaylarına gireceğiz,eğer bu konuda bilginiz yok ise konuyla ilgili dersler mevcut. ordan takip edebilirsiniz.

ilk başta kullandığımız yönteme benzer olarak bu kez olusturacagım sessionu benim belirleyeceğim bir zamana eşitleyeceğim.
session("gonderim" ) = session("gonderim" ) +1 demiştik.

şimdide session("zaman" ) = now( ) şeklinde bir eşitleme yapıyoruz.
yani kullanıcımız işlem yaptığı anda saniyesi saniyesine sessionumuz değeri atanmış olur ve hiç bir zaman buna bir anı eşitleyemeyiz.biliyonuz zaman geri gelmiyor : )

bunu nasıl kullanırız ?
örneğin.
session("zaman" ) değeri ile benim belirleyeceğim bir anın farkı yine benim belirleyeceğim bir süreden küçükse işlem yapma diyebiliriz.bu süremiz örnek olarak 60 saniye olsun.

yukarda anlattığım gibi session("zaman" ) > 60 dediğimiz zaman session bu işten bişi anlamıyacaktır.(burdada, neden datediff kullanmamız gerektiğini ispatlıyoruz. )

mantık olarak;
yine now( ) değerini ele alalım.
hayırlayın.. ve karıştırmayın,, session("zaman" ) = now( ) çalıştırıldığı anda kaydolacak ve bu oturum kapanmadığı sürece
asla değişmeyecek.
yani ikinci bir now( ) kullanacağız.

deger = datediff("s",session("zaman" ),now )
burdaki "s" değeri saniye cinsinden işlememizi sağlar.
konuyu anlamışsanız yukarda, mümkün olmayacağını söylediğim " session("zaman" ) > 60 " kıyaslamasın için
istediğimiz değeri elde ediyorum
yani bir nevi isnumeric( )=true olayı
mantık olarak almış olduğum DEGER 60 saniyemden küçükse diye bir kıyaslamanın mümkün olduğunu hemen görüyoruz
fazla uzatmadan işe koyulalım.
if deger < 60 then
Response.write " bu Session 60 saniye dolmadan tekrar çalıştırılmış.. "
başka bir deyişle
Response.write " bu Session "&60-deger&" saniye beklemelisin"
bir başka bir deyişle daha : )
Response.write " bu Session "&60-(60-deger )&" saniye önce çalıştırılmış.. "&60-deger&" saniye beklemelisin"

Else
------------
Sessionu tazeleyebiliriz
yani işlemimizin yapılmasında bir sakınca yok.post,arama vs.
session("zaman" )=now( )
--------------
End If
umarım buraya kadar herşey anlaşılmıştır.
/////////////////////////////////////////
Gelelim vbulletin olayında arama sınırlamasına
neydi o ?
ben ardarda 3 kere arama yapınca Dördüncüyü yapmak istediğimde 180 saniye bekle, sonra ara diyordu.

bu kısmı fazla izah etmiyeceğim çünkü olayın temelini yukarda uzun uzun anlattım.

ara.asp ve araniyorum.asp : ) deyi iki sayfamız olsun.

ilk olarak araniyorum.asp sayfasına şunları koymalıyım.
session("zaman" )=now( )
if session("gonderim" )="" then
session("gonderim" ) = 1
else
session("gonderim" ) = session("gonderim" ) + 1

burda ne yaptım ?
araniyorum.asp sayfasına x kullanıcısının her gönderdiği veride
session("zaman" ) belirleniyor ve session("gonderim" ) değeri her seferinde +1 artıyor.

ara.asp sayfamızda ise.

eğer session("gonderim" ) sayısı benim belirlediğimden bir sayıdan büyük ise
ve session("zaman" ) değeri ile now( ) değerinin farkı benim belirlediğim bir süreden küçükse formu görüntüleme. adam arıyamasın.
gitsin başka yerde aransın: ) bu süre yine 60 saniye olsun. ve bu süre farkı zarfındaki arama hakkı 3 olsun.


deger = datediff("s",session("zaman" ),now )
değerimi aldım.
session("gonderim" ) bunuda masamın kenarına koydum..
If session("gonderim" ) > 3 AND DEGER < 60 then
-----------------------
Response.write " "&60-(60-deger )&" saniye içerisinde üstüste 3ten fazla arama yapmışsın.definemi arıyon hayırdır? "

Response.write " yeniden arama yapmak için "&60-deger&" saniye beklemelisin"
uyarımızı verdik
----------------------
Else
kullanıcı koşullara uymuyorsa yani temiz ise formu göster aransın diyoruz..
<form title=arama formu></form>
End If diyoruz ve dersimiz burda bitiyor.
Çalışın arkadaşlar. hiç bir zaman hazırcı olmayın.
Rahmetli Atatürkün bi lafı var. hazırcılık bir milletin sonunu getirir gibi bişeydi.
bir kişiden bir fayda görmüşseniz sizin bir başka kişiye iki faydanız dokunsun.
iyi çalışmalar

 

   

Bu dersi Yazdır

 
 
  Bugün 71 ziyaretçi (85 klik) buradaydı  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol