|
|||||||
| ||
![]() |
|
|
Seçenekler | Arama | Stil |
![]() / Asp / Flood olaylarında Session kullanımı | ||||||||||
|
(#1)
|
||||||||||
|
[10]Yeni Üye
![]() ![]() >Mesaj Sayısı: 21
>Açtığı Konu: 9
Level: 3 [ ![]() ]Paylaşım: 0 / 57 Üyelik tarihi: Apr 2007
Kullanıcı No: 366
Rep Puani: 100
Rep Derecesi :
![]() ![]() |
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 |
|||||||||
|
||||||||||
|
|
![]() Cevap: / Asp / Flood olaylarında Session kullanımı | ||||||||||
|
(#2)
|
||||||||||
|
>Mesaj Sayısı: n/a
>Açtığı Konu: 5413
Level: -INF [ ]Paylaşım: NAN / -INF |
saol bilgiler için
|
|||||||||
|
||||||||||
![]() Cevap: / Asp / Flood olaylarında Session kullanımı | ||||||||||
|
(#3)
|
||||||||||
|
[10]Yeni Üye
![]() ![]() >Mesaj Sayısı: 75
>Açtığı Konu: 1
Level: 7 [ ![]() ![]() ![]() ![]() ]Paylaşım: 0 / 164 Üyelik tarihi: May 2007
Kullanıcı No: 42556
Rep Puani: 100
Rep Derecesi :
![]() ![]() |
saol eline saglık
|
|||||||||
|
||||||||||
![]() |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | Arama |
| Stil | |
|
|