Makale Özeti

Web sitelerinin kullanıcıdan bilgi alınabilmesi için gerekli olan form bölümleri oldukça önemlidir. Ziyaretçilerin fikirlerini almak, misafir defterinizi imzalatmak, sipariş almak gibi her türlü işlemin yapılabileceği formlar bir süre öncesine kadar bizi hiç sıkıntıya sokmasa da, son zamanlarda oldukça yaygınlaşan "texasholdem" gibi "Dot Com" şirketlerinin reklamlarını bu yolla yapmaya başlaması sonucu yönetici arabiriminizde onaylanmayı bekleyen "yüzlerce" yorumla ve ya siparişle karşılaşabilirsiniz.

Makale

Web sitelerinin kullanıcıdan bilgi alınabilmesi için gerekli olan form bölümleri oldukça önemlidir. Ziyaretçilerin fikirlerini almak, misafir defterinizi imzalatmak, sipariş almak gibi her türlü işlemin yapılabileceği formlar bir süre öncesine kadar bizi hiç sıkıntıya sokmasa da, son zamanlarda oldukça yaygınlaşan "texasholdem" gibi "Dot Com" şirketlerinin reklamlarını bu yolla yapmaya başlaması sonucu yönetici arabiriminizde onaylanmayı bekleyen "yüzlerce" yorumla ve ya siparişle karşılaşabilirsiniz.

Bu reklam yönteminin altında yatan tek basit yöntem web sitelerindeki linkleri takip ederek formları bulan ve formları reklamlarla doldurarak otomatik olarak post eden basit uygulamalardır.

Peki bu gibi sorunlara uygun olarak ne gibi çözümler yaratabiliriz? Aslına bakarsanız bu sorunun tek bir çözümü var, o da sitenizde formun oluşması sırasında random olarak oluşturulacak ve kullanıcıdan içeriğinin birebir olarak bir form alanına yazılması istenecek bir resimdir. Daha önce böyle bir kullanım tarzıyla mutlaka karşılaştığınızı düşünerek yapacağımız işlemi kısaca anlatmak istiyorum.

Öncelikli amacımız ICR gibi teknolojilerin kullanılmasıyla okunması mümkün olmayacak, dolayısı ile yalnızca bir insanın okuyabileceği görünürlükte bir resim dosyası oluşturmak. Bu resim dosyasının üzerinde harfler ve rakamlardan oluşan random bir yazı olacak. Bu resim oluşturulduğunda üzerindeki yazıyı bir Session içerisine atacağız. Sayfamızın üzerinde bu resmi ve kullanıcının resimde gördüğü yazıyı yazabileceği bir TextBox oluşturacağız ve girilen değeri Session üzerinde tuttuğumuz değer ile karşılaştırıp sitemizi ziyaret eden kişinin gerçekten bir insan mı yoksa bir bilgisayar programı mı olduğuna karar vereceğiz.


Birinci adım olarak yeni bir ASPX dosyası oluşturarak bu dosyanın bizim için ilgili resmi üretmesini ve bu resmi response olarak göndermesini sağlayalım. Ben bu işlem için "GuvenlikResmi.aspx" isminde bir dosya oluşturacağım. Dosyanın HTML içeriğinde herhangi bir değişiklik yapmanıza gerek yok fakat isterseniz @ Page satırı haricindeki tüm satırları silebilirsiniz. Şimdi de sayfamızın kodunu tam olarak aşağıdaki gibi yazalım:


using System;
using System.Collections;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;

public partial class GuvenlikResmi : System.Web.UI.Page
{
    protected void Page_Load( object sender , EventArgs e )
    {
        // Güvenlik kelimesinin uzunluğudur.
        const int UZUNLUK = 5;

        // Güvenlik kelimesinde kullanılacak karakterler dizesidir.
        string[] m_Karakterler = new string[] {
                    "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" ,
                    "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" ,
                    "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "0" ,
                    "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9"
                };

        // Random olarak rakam oluşturabileceğimiz Random class'ının tanımlanmasıdır.
        Random m_Random = new Random ();

        // Boş güvenlik kelimemizdir.
        string m_GuvenlikKelimesi = String.Empty;

        for ( int i = 0 ; i < UZUNLUK ; i++ )
        {
            // Random oluşturulan rakamın index olarak kabul edilip, m_Karakterler dizesinden ilgili karakterin alındığı satırdır.
            m_GuvenlikKelimesi += m_Karakterler[m_Random.Next ( m_Karakterler.Length - 1 )];
        }

        // Güvenlik kelimesinin Session'a eklendiği satırdır.
        Session.Add ( "GuvenlikKelimesi" , m_GuvenlikKelimesi );

        // Resim çizme işleminin yapıldığı bölümdür.
        Bitmap m_Resim = new Bitmap ( 100 , 20 );
        Graphics m_Grafik = Graphics.FromImage ( m_Resim );
        Font m_Font = new Font ( "Tahoma" , 10 , FontStyle.Italic );
        Brush m_FircaMavi = new SolidBrush ( Color.Blue );
        Brush m_FircaBeyaz = new SolidBrush ( Color.White );

        m_Grafik.FillRectangle ( m_FircaBeyaz , 0 , 0 , m_Resim.Width , m_Resim.Height );
        m_Grafik.DrawString ( m_GuvenlikKelimesi , m_Font , m_FircaMavi , new PointF ( 2 , 2 ) );

        // Resmin ekrana gönderildiği bölümdür.
        Response.ContentType = "image/gif";
        m_Resim.Save ( Response.OutputStream , ImageFormat.Gif );
    }
}


Tarayıcımızı kullanarak resmimizi kontrol edelim:



Sayfamızı yenileyelim:



Görmüş olduğunuz gibi, her seferinde farklı olmak üzere, 5 karakter uzunluğunda bir kelimeyi resim olarak gösterdik. Şimdi de resmimizi kullanacağımız sayfamızı açarak Visual Studio üzerinde bu dosyamıza yeni birkaç kontrol ekleyelim:



Yorum TextBox'ımızı txYorum, Güvenlik Kelimesi TextBox'ımızı txGuvenlikKelimesi, Button kontrolümüzü bnGonder ve Resim kontrolümüzü de imgGuvenlikKelimesi olarak isimlendirelim ve resim kontrolümüzün "ImageUrl" özelliğini yanında bulunan "..." butonuna tıklayarak "Select Image" ekranı aracılığı ile atayalım:



"Files of type" seçeneğinden "All Files" seçimini yapalım:



"All Files" seçimi sonrasında "Contents of folder" seçeneğinde daha fazla dosya belirecektir:



Buradan da "GuvenlikResmi.aspx" dosyasını seçelim ve tarayıcımızda bu dosyamızı çağıralım:



Şimdi de "bnGonder" butonumuzun "OnClick" event'ini aşağıdaki şekilde yazalım:

protected void bnGonder_Click( object sender , EventArgs e )
{
    if ( Session["GuvenlikKelimesi"] == null )
    {
        Response.Write ( "Session bulunamadı. Yorumunuz ile ilgili işlem yapılamadı." );
        return;
    }

    if ( txGuvenlikKelimesi.Text == Session["GuvenlikKelimesi"].ToString () )
        Response.Write ( "Güvenlik kelimesi onaylandı. Yorumunuz ile ilgili işlem başarıyla tamamlandı." );
    else
        Response.Write ( "Güvenlik kelimesi onaylanamadı. Yorumunuz ile ilgili işlem yapılmadı." );
}


Artık uygulamamız hazır durumda. Şimdi Güvenlik Kelimesi alanına yanlış bir kelime girerek butona tıklayalım:




Son olarak da doğru kelimeyi yazarak işlemimizi tekrarlayalım:



Bir üstteki ekran görüntüsünde Güvenlik kelimesi ile resmin farklı değerlere sahip olduğunu görmektesiniz. Bunun sebebi resmin her refresh sonrası yeniden oluşturulmasıdır. Girilmiş olan "71WED" bir önceki oluşturulmuş ve ekranda gösterilen resmin değerine eşit olduğundan işlem tamamlanmış ve sonrasında başka bir değerle yeni bir resim oluşturulmuştur.


Kaynak kodları "Download" bölümünden indirebilirsiniz.



Coşkun SUNALI
http://sunali.com
Örnek uygulama. Visual Studio 2005 Beta 2 ile yazılmıştır.