![]() |
|
| ||||
| ASP sistemlerde sıkça karşılaştığımız hataların çözüm yollarını bu başlık altına toplamaya çalişacam. Hata Tipi:”Active Server Sayfaları, ASP 0116 (0×80004005) Komut yazıları bloğunda etiketin sonu eksik (%>).” Sebebi: Kodlarınızı “%>” ile kapatmamışsınız. Çözüm: “%>” yazınız. Hata Tipi: “Microsoft VBScript derleme hatası (0×800A03F6) ‘End’ gerekli” Sebebi: if kontrol kodunu bitirmemişsiniz. Çözüm: Gereken yere “end if” yazın. Hata Tipi: “Microsoft VBScript derleme hatası (0×800A0409) Sonlandırılmamış dize sabiti” Sebebi: Çift tırnak (”) yazmamışsınız.Veya çok fazla yazmışsınız. Çözüm: Kodları inceleyerek tırnakları düzeltiniz. Hata Tipi: “Microsoft VBScript çalışma hatası (0×800A000D) Tür uyumsuz: ‘a’” Sebebi: Eğer bir sayı ve metin ile matematiksel işlem yapmak isterseniz veya tarih değelerinde yanlış bir işlem yapmaya kalkarsanız alırsınız. Çözüm: Yapmak istediğiniz işlemi kontrol ediniz.Değişken türlerini tekrar gözden geçirin. Hata Tipi: “Server nesnesi, ASP 0177 (0×800401F3) Geçersiz ProgID Bu iletiyle ilgili daha fazla bilgi için, lütfen aşağıdaki adresten Microsoft Online Support sitesini ziyaret edin: http://www.microsoft.com/content********.asp.” Sebebi: Sunucunuzun desteklemediği bir objeyi yaratmak istemişsiniz. Çözüm: Obje adını kontrol edin, sunucunun desteklediğinden emin olun Hata Tipi: “Microsoft OLE DB Provider for ODBC Drivers (0×80004005) [Microsoft][ODBC Driver Manager] Veri kaynağı adı bulunamadı ve varsayılan sürücü belirtilmemiş” Sebebi: DSN adını yanlış yazdınız veya DSN tanımlamadınız.Ya da DSN-Less bağlantı kodu yanlış. Çözüm: DSN adını kontrol edin veya DSN-Less bağlantı kodunu gözden geçirin. Hata Tipi: “Microsoft OLE DB Provider for ODBC Drivers (0×80004005) [Microsoft][ODBC Microsoft Access Sürücüsü]Genel hata ‘Temporary (volatile) Jet DSN for process 0×140 Thread 0×5ec DBC 0×13679bc Jet’ kayıt defteri anahtarı açılamadı.” Sebebi: Belirttiğiniz adreste veritabanı bulunamadığında çıkar. Çözüm: Yazdığınız yolu veya veritabanını kontrol ediniz. Hata Tipi: “Microsoft OLE DB Provider for ODBC Drivers (0×80040E14) [Microsoft][ODBC Microsoft Access Sürücüsü] SELECT deyimi, saklı bir sözcük veya yanlış yazılmış veya eksik bir bağımsız değişken içeriyor veya noktalama işareti yanlış” Sebebi: Yazdığınız SQL kodunda bir sorun var. (Burada * çıkarıldı) Çözüm: Yazdığınız SQL kodunu kontrol ediniz. Hata Tipi: “ADODB.Recordset (0×800A0BB9) Yanlış türdeki değişkenler kabul edilebilir aralık dışında veya bir başkasıyla çakışan bağımsız değişkenler kullanılıyor” Sebebi: Recordset’i açmaya çalıştığımız Connection adı bulunamadı veya connection açılmadı.Başka bir sebepte SQL kodu bulunamadı. Çözüm: Connection’ı açın veya adını kontrol edip, düzeltin.Ya da SQL kodunu yazdığınızdan emin olun. Hata Tipi: “ADODB.Recordset (0×800A0CC1) Öğe, istenen ad veya sıra sayısı ile ilişkili derleme içinde bulunamıyor” Sebebi: Alan adı bulunamıyor.Ekrana yazdırmak istediğiniz veya kullanmak istediğiniz alan adı tabloda yok. Çözüm: Yazdığınız alan adını kontrol edin, tablonun bu adda bir alan içerdiğinden emin olun. Hata Tipi: “Microsoft OLE DB Provider for ODBC Drivers (0×80040E10) [Microsoft][ODBC Microsoft Access Sürücüsü] Çok az parametre. 1 bekleniyor.” Sebebi: SQL kodu içinde işleme tabi tutmak istediğiniz alan yok. Çözüm: Yazdığın alan adını kontrol edin, tablonun böyle bir alan içerdiğinden emin olun. |
| ||||
| Internet uygulamaları geliştirilirken dikkat edilmesi gereken en önemli unsurlardan birisi güvenliktir. Kullanıcıların yetki seviyeleri, yani rollerine göre gerçekleştirebileceği işlemler denetlenebilmeli, yetkisi olmayan kullanıcılar ise engelenebilmelidir. ASP.NET teknolojisinde güvenlik iki kısımdan oluşmaktadır, bunlar gerçekliğin doğrulanması (�authentication�) ve yetki kontroludur �(authorization)�. Gerçekliğin doğrulanması işlemi, kullanıcı adı ve şifre bilgilerinin doğru olup olmadığının ilgili kullanıcı bilgilerini saklayan yapının denetlenerek bulunmasıdır. Gerçekliğin doğrulanması işlemi başarı ile sonuçlanırsa, yetki kontrol işlemi aracılığı ile kullanıcının ilgili kaynaklara erişip erişemeyeceğine karar verilmektedir. ASP.NET kod içerisinde de kullanıcı kimliğini kullanarak yetkiye göre davranış sergileyebilmektedir. Buna kişileştirme (�impersonation�) denilmektedir. Özetlemek gerekirse güvenlik 3. adım seçimlik olmak üzere üç adımdan oluşmaktadır; <!–[if !supportLists]–> 1) <!–[endif]–> Kullanıcı Gerçekliğinin Doğrulanması <!–[if !supportLists]–> 2) <!–[endif]–> Kullanıcı Yetkilerinin Kontrolü <!–[if !supportLists]–> 3) <!–[endif]–> Kullanıcı için kişileştirilme (�User Impersonation�), uygulama istekte bulunan kullanıcının tipine göre kod çalıştırmaktadır. ASP.NET teknolojisinde gerçekliğin doğrulanması işlemi üç farklı yapı içerisinde sağlanabilmektedir. Bu yapılar şunlardır; <!–[if !supportLists]–> a) <!–[endif]–> �Form-Based Authentication� <!–[if !supportLists]–> b) <!–[endif]–> �Windows Authentication� <!–[if !supportLists]–> c) <!–[endif]–> �Passport Authentication� Bu makalede �Form-Based Authentication� hakkında detaylı bilgi verilecektir. Bunun sebebi yukarıdaki üç yaklaşım arasından en esnek olanı olmasından dolayıdır. Bu esnekliği sağlayan kendimize ait HTML formları oluşturabilmemiz ve işlemi kontrol edebilmemizdir. �Form-Based Authentication� yapısında gerçekliğin doğrulanması işlemi için �cookie� ler kullanılmaktadır. Gerçekliğin doğrulanması işlemini gerektiren isteklerde bulunulduğunda (Örneğin sanal alışveriş sitesinde alınacak ürün seçildikten sonra ödeme işlemini sadece sisteme kayıtlı kullanıcıların yapması) kullanıcı �HTML Login� formuna yönlendirilmektedir. Kullanıcı adı ve şifre bilgileri girildikten sonra bu bilgilerin doğru olup olmadığı sistem tarafından ilgili kaynakların (kullanıcı bilgilerinin saklandığı veritabanı veya XML dosya veya web.config dosyası…) taranması aracılığı ile tespit edilmektedir. Bilgilerin doğru olması durumunda kullanıcı kimliğini belirten bir cookie yaratılmaktadır. Daha sonraki istekler için bu cookie kontrol edilmektedir. Gerçekliğin doğrulanması işleminin aktif hale getirilmesi için web.config dosyası içerisinde, <security> bölümü altındaki <authentication> öğesi biçimlendirilmelidir. Code: <configuration> <system.web> <security> <authentication mode=”Forms”> </authentication> </security> </system.web> </configuration> �Form-Based Authentication� Bu kısımda �Form-based authentication� örnekler ile açıklanacaktır. İlk örnekte kullanıcı adı ve şifreler web.config dosyasında saklanacak, böylelikle cookie tabanlı gerçekliğin doğrulanması işlemine kolay bir bakış açısı sağlanacak, ikinci örnekte ise fonksiyonelliği arttırmak amacı ile kullanıcı adı ve şifreler bir veritabanı tablosuna taşınacaktır. 1.Örnek Bu örnek 3 ayrı dosyadan oluşmaktadır. Bunlar web.config, default.aspx ve login.aspx dosyalarıdır. web.config ———– Code: <configuration> <system.web> <authentication mode=”Forms”> <forms name=”.ASPXUSERDEMO” loginUrl=”login.aspx” protection=”All” timeout=”60″> <credentials passwordFormat=”Clear” > <user name=”hersh” password=”bhasin”/> <user name=”joe” password=”smith”/> <user name=”test” password=”user”/> </credentials> </forms> </authentication> <authorization> <deny users=”?” /> </authorization> <globalization requestEncoding=”UTF-8″ responseEncoding=”UTF-8″ /> </system.web> </configuration> <authorization> bölümü içerisinde <deny> ve <allow> olmak üzere iki bölüm yaratılabilmektedir. <deny users= �?�/> satırı ile cookie (bu cookie ileride gösterilecek kod örneklerinde daha iyi bir şekilde anlaşılabilecek olan �authentication� işleminin başarılı geçmesi durumunda bir değer taşıyan cookie�dir) içerisinde bir değer bulunmaması durumunda bu kullanıcıyı reddet emri sisteme verilmektedir. Login.aspx Code: <%@ Import Namespace=”System.Web.Security ” %>
<html>
<script language=”VB” runat=server>
public void Login_Click(object Src,EventArgs e)
{
if(FormsAuthentication.Authenticate(UserName.Value,UserPass.Value)
{
FormsAuthentication.SetAuthCookie(UserName.Value,false);
Response.Redirect(”default.aspx”);
}
else
{
Msg.Text = “Yanlış kullanıcı adı veya şifre: Yeniden deneyiniz.“
}
}
</script>
<body>
<form runat=server>
<h3><font face=”Verdana”>Login Page</font></h3>
<table>
<tr>
<td>User Name:</td>
<td><input id=”UserName” type=”text” runat=server/></td>
<td><asp:RequiredFieldValidator ControlToValidate=”UserName” Display=”Static” ErrorMessage=”*” runat=server/></td>
</tr>
<tr>
<td>Password:</td>
<td><input id=”UserPass” type=password runat=server/></td>
<td><asp:RequiredFieldValidator ControlToValidate=”UserPass” Display=”Static” ErrorMessage=”*” runat=server/></td>
</tr>
</table>
<asp:button text=”Login” OnClick=”Login_Click” runat=server/>
<asp:Label id=”Msg” ForeColor=”red” Font-Name=”Verdana” Font-Size=”10″ runat=server />
</form>
</body>
</html>
<html> <script language=”VB” runat=server> public void Login_Click(object Src,EventArgs e) { if(FormsAuthentication.Authenticate(UserName.Value ,UserPass.Value) { FormsAuthentication.SetAuthCookie(UserName.Value,f alse); Response.Redirect(”default.aspx”); } else { Msg.Text = “Yanlış kullanıcı adı veya şifre: Yeniden deneyiniz.“ } } </script> <body> <form runat=server> <h3><font face=”Verdana”>Login Page</font></h3> <table> <tr> <td>User Name:</td> <td><input id=”UserName” type=”text” runat=server/></td> <td><asp:RequiredFieldValidator ControlToValidate=”UserName” Display=”Static” ErrorMessage=”*” runat=server/></td> </tr> <tr> <td>Password:</td> <td><input id=”UserPass” type=password runat=server/></td> <td><asp:RequiredFieldValidator ControlToValidate=”UserPass” Display=”Static” ErrorMessage=”*” runat=server/></td> </tr> </table> <asp:button text=”Login” OnClick=”Login_Click” runat=server/> <asp:Label id=”Msg” ForeColor=”red” Font-Name=”Verdana” Font-Size=”10″ runat=server /> </form> </body> </html> Yukarıdaki kodda kritik olarak incelenmesi gereken kısım aşağıdadır; public void Login_Click(object Src,EventArgs e) { if(FormsAuthentication.Authenticate(UserName.Value ,UserPass.Value) { FormsAuthentication.SetAuthCookie(UserName.Value,f alse); Response.Redirect(”default.aspx”); } else { Msg.Text = “Yanlış kullanıcı adı veya şifre: Yeniden deneyiniz.“ } } Bu metodta kullanılan �FormsAuthentication� sınıfı System.Security içerisinde bulunan ve �forms-based authentication� işlemlerinde kullanılan sınıftır. �Authenticate� metodu ile girilen kullanıcı adı ve şifrenin web.config dosyasında tanımlı olan şifreler ile eşleşip eşleşmediğine bakılmaktadır. Eğer eşleşme doğru ise ilgili cookie değerine kullanıcı adı atanmakta ve sayfa yönlendirilmektedir. Eşleşmenin yanlış olması durumunda kullanıcı uyarılmaktadır. Buraya kadar olan kısmı bir örnek ile özetlemek gerekirse; 1) <!–[endif]–> Gerçekliğin doğrulanması işlemine ihtiyaç duyulduğu zaman hangi sayfaya gidilmesi gerektiği tanımlanır; <forms name=”.ASPXUSERDEMO” loginUrl=”login.aspx” protection=”All” timeout=”60″> 2) <!–[endif]–> web.config dosyasında kullanıcı adları ve şifreleri tanımlanır <credentials passwordFormat=”Clear” > <user name=”hersh” password=”bhasin”/> <user name=”joe” password=”smith”/> <user name=”test” password=”user”/> </credentials> 3) <!–[endif]–> İlgili yetki tanımları yapılır <authorization> <deny users=”?” /> </authorization> 4) <!–[endif]–> Gerçekliğin doğrulanması işleminin başarılı olup olmadığını kontrol eden kod eklenir. (Login_Click metodu) 2.Örnek Bu örnekte daha önceden de belirtildiği gibi kullanıcı adı ve şifreler veritabanındaki bir tablodan alınacaktır. Kod olarak �MSPetshop� uygulamasından yararlanılmaktadır. Web.config dosya yapısı Code: …… …… <authentication mode=”Forms”> <forms name=”PetShopAuth” loginUrl=”SignIn.aspx” protection=”None” path=”/” /> </authentication> </system.web> <!– set secure paths –> <location path=”EditAccount.aspx”> <system.web> <authorization> <deny users=”?” /> </authorization> </system.web> </location> <location path=”OrderBilling.aspx”> <system.web> <authorization> <deny users=”?” /> </authorization> </system.web> </location> </configuration> SignIn.aspx.cs Dosyası …………………………… Code: private void btnSubmit_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
if (Page.IsValid == true)
{
Customer customer = new Customer();
string customerID = customer.Login(txtUsername.Text, txtPassword.Text);
if (customerID != null)
{
Response.Cookies[”CustomerID”].Value = customerID; FormsAuthentication.SetAuthCookie(customerID, false);
Response.Redirect(”VerifySignIn.aspx”);
}
else
{
lblErrorMessage.Visible = true;
}
}
}
…..
Konu Dogann tarafından (01-04-2008 Saat 16:36:54 ) de değiştirilmiştir.. |
| ||||
| HTML ilk olarak uğraşmaya başladığımda bir yere bir tarih yazmak istediğimde <b>30.12.3002 Perşembe</b> yazmam yeterli oluyordu. Ama sayfa ve güncelleme sayısı arttıkça bu ve bu gibi işler içinden çıkılmaz bir hal almaya başlamışlardı. Oldukça uzun bir süre böyle cebelleştik. Ama gün geldi “ve Microsoft, ASP’ yi yarattı.” Artık hiçbir şey eskisi gibi değildi. Her şey çoook güzeldi. Ama bir gün, iş evimde kendi ülke ayarlarımdan farklı bir sunucuda dosyalarımı host etmeye geldiğinde ASP ile yazdığım sitenin çuvalladığını gördüm. Tarihler 30.12.3002 değil de 12/30/2002 şeklinde çıkmaya başladı. (Titiz bir insan için önemli bir problem.) İşte o zaman bir karar verdim. “Ne gerek var, bu tarih formatına” dedim. Tamam işler daha kolaydı. İşimi kolaylaştıran bir çok artısı vardı. Ama karşı sunucuda işler umduğum gibi gitmiyordu. Böylece tarihleri kendi formatımda saklamaya ve gerekli dönüşüm fonksiyonları ile ekrana yazdırmaya başladım. VB Script’ in Mid() fonksiyonu bu işler için tam biçilmiş kaftandı. Tarihleri, artık veritabanında tarih tipinde değil metin tipinde 8 karakterlik bir alanda saklamaya başlamıştım. Sıralamada sorun yaşamamak için YILAYGUN (30021230) şeklini benimsedim. 2 karakter deyip geçmemek gerek. Biraz hesaplama yapıldığında aslında ne kadar vahim bir durum olduğu ortaya çıkar. Kayıt Sayısı Alan Sayısı 1 Char Boyut (KB) 2 Char Boyut (KB) Yukarıdaki tabloda 2 byteçık bilginin nelere yol açabileceğini sergilemeye çalıştım. Belki 10 Milyon kayıt biraz abartılı olabilir ama .mdb içindeki 100.000 kayıt hiç de abartılı değil. Veritabanımız içinde tarih sakladığımız 4 adet alan olması halinde yaklaşık 780 KB’ lik fazla yer işgali ile karşı karşıya kalırız. Size rahatlıkla söyleyebilirim ki 5 tablodan oluşacak ufak bir uygulamanızda bile ortalama 10 adet alanda tarih saklamak zorunda kalırsınız. Yüksek trafikli sitelerde size getireceği yükü hayal edebilirsiniz… Ayrıca, hosting aldığınız firmaya ülke ayarlarını kurdurmanın zorlukları ve/veya imkansızlıkları düşünüldüğünde yöntem geleneksel ama işe yarar bir yöntemdir. |
| ||||
| Genel olarak bir form içindeki bilgiler diğer bir sayfaya gönderilir ve bu sayfa içinde çeşitli işlemlere tabi tutulur. Örneğin: <form action=”uye_ekle.asp” method=”post” name=”frmUyeBilgileri”> gibi bir yapıyla bilgiler ayrı bir dosya içinde değerlendirir. Yapısallık açısında iyi bir yöntem gibi görünse de istemeden de olsa proje içinde dosya karmaşasına yol açılmış olunur. Bunu önlemek için güzel bir yol mevcut. Dikkat ettiyseniz, yukarıdaki örnekte method kısmını kırmızı ile yazdım. İşte anahtarımız bu. Şöyle bir fikir jimnastiği yapalım. Action kısmında yer alan dosya ismi bizim formumuzun içinde bulunduğu dosya olursa ne olur? Tabi ki sayfa yeniden yüklenir ve form boş olarak görüntülenir. Aslında bilgiler post edildi. Fakat bu bilgileri işleyebilmemiz için birkaç düzenleme yapmamız gerekiyor. 1- .ASP dosyamızın başına aşağıda ki kodu eklemeliyiz. Görüldüğü üzere bu kod boolean tanımlı bir değişkeni post edilme durumuna göre 1 veya 0 yapıyor. Code: <%@ Language=VBScript %> <% Dim bPost BPost = False If Request.ServerVariables (”request_method”)=”POST” Then bPost=True End If %> If Not bPost Then ‘Herhangi bir bilgi Post Edilmemişken görüntülenecek sayfa Code: %> <form ….> </form> <% ‘Herhangi bir bilgi Post Edildikten sonra görüntülenecek sayfa txtAd=Request.Form (”txtAd”) IsaretliSayisi = Request.Form (”chkUyeID”).Count End If Görüldüğü gibi yöntem oldukça basit. Bundan sonra formdan gelen bilgilere göre sayfanın ikinci bölümünü daha alt parçalara bölmek de mümkün. |
| ||||
| VBScript yani Visual Basic Script. Ama biz kısaltılmış olan adını yani VBScript adını kullanıyoruz. Visual Basic dilini biliyor iseniz, VBScript dilini biliyorsunuz sayılır. İstemci tarafında çalışan sayfalar da Netscape VBScript dilini anlamaz. Ama bizim sayfalarımız Server’ da çalışacağı için bu sorun olmayacak. Sadece bir kaç VBScript komutu ile mükemmel ASP sayfaları hazırlayabiliriz. ASP sayfalarımızdaki script dillerini, gerek VBScript, gerek diğer script dillerini sayfa içindeki HTML kodlarından ayırmamız gerekir. ASP.DLL’ ye “ASP.DLL kardeş, Script dilimiz şurada başlıyor, şurada bitiyor“ dememiz gerekir. Bunun için şimdi öğreneceğimiz script dili VBScript’ in kodlarını <% %>işaretleri arasına alırız. Kardeşimiz ASP.DLL bu işaretler ” <% %>” arasındaki komutları yazmak yerine yapar. HTML’ deki “< >” klasik unsurlar aynen sayfaya yazılır, ama <% ve %>işaretine gelince çok sevgili ASP.DLL’ miz durur ve bir düşünür. <% ve %>işaretlerinin arasındaki her şey “Language” ile belirlediğimiz scriptin yorumlayıcısına gönderilir (Aralarında sürekli paslaşır bunlar). <% ve %>işaretlerine sınırlayıcı denir. Sınırlayıcının içinde bir ya da bir çok satır kod bulunabilir. ASP ve VBScript komutlarımızın arasında “Yorum Satırımız” olmalıdır. Bu neden gereklidir? Yorum satırını bir kodu ne için nerede kullandığımızı belirtmek için kullanırız. Böylece kodlarımızı başka biri devam ettirmek istediğinde nerede ne yaptığımızı açıkça görmüş olur. Ya da uzun süre çalışmadığımız ASP sayfamızda unuttuğumuz yerler olabilir. Bunlara hatırlatma satırı da denir. Yorum satırının başına ( ‘ ) tek tırnak işareti koyarız. Böylece serverın yorumlayıcısı bu tek tırnağı gördüğünde, görmemezlikten gelir. Sanki hiç tanışmıyorlarmış gibi! Şimdi VBScript ile bu teknikleri kullanarak bir sayfa yazalım. ORNEK: Code: <% @LANGUAGE=VBScript %> <html> <head> <title>Merhaba VBScript</title> <meta http-equiv=”content-type” content=”text/html; charset=ISO-8859-9″> <meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″> </head> <body> <center> <% ‘ Yazı boyutumuzu belirlediğimiz bir değişken tanımlayalım Dim fontBoyut %> <% ‘ Yazı boyutumuzu 1′den 7′ ye kadar değiştirelim For fontBoyut = 1 to 7 %> <font size = <%= fontBoyut%> > VBScript’ e Merhaba <br> <% next %> </center> <h4> Bugün <%= WeekdayName(Weekday(Date)) %>, <%= Date %>. Şu anda Server’ a saat: <%= Time %>.<p> </h4> </body> </html> . Açıklama satırında da neler yaptığımızı anlatmaya çalıştık. Kısa ve öz. Daha sonra yazı boyutumuzun 1′den 7′ ye kadar değişmesini istediğimizi söyledik. Bu font boyutlarının sayfada uygulanabilmesi için font özelliklerini belirttiğimiz HTML etiketi olan <font=”"> etiketine tanımladığımız değişkeni yazdık. Böylece font boyutumuzu değişkenimiz belirleyecek: <font size= <%= fontBoyut %> > dedik. <%= bu ifade ASP’ de Response.Write metodunun kısaltılmış halidir. Yani <%= bu işareti yazdığımızda, içine değişkeni yazmamız gerekiyor tabii, bu değişkeni al sayfaya yaz demiş oluyoruz. Böylece değişkenimiz VBScript’e Merhaba yazısını sayfaya 1′ den 7′ ye kadar büyüterek yazdı. Bunları sayfada sıralamasını sağlamak için de <% next %> döngüsünü yazdık. Daha önce de gördüğüm tarih işlemini yazdık. Ama bu defa biraz farklı olarak. Dikkat ederseniz ASP ve VBScript kodlarını Yeşil renk ile yazıyorum. Böylece diğerlerinden ayırmamızın daha kolay olacağı kanısındayım. Değişkenler ve dögülerden ileride daha çok bahs edeceğiz. Çünkü onlarsız hiç bir işe yaramayız ![]() |
| ||||
| Bazı projelerde ziyaretçiye download yapabilmesi için siteye giriş yapması gerekebilir. Örneğin online yazılım satışı yapan bir sitede sadece ücreti ödeyen ziyaretçilerin download hakkı olmalıdır. Bunun yanında download ettiği dosyanın yoluna bakıp satın almadığı başka dosyaları alabilme şansı olmamalıdır. Bu durumda download işleminin güvenliğini directory security gibi klasik yollarla değil , ASP ile programlama yaparak çözebiliriz.Aşağıdaki örnekte “files” klasöründeki dosya.zip dosyası ASP ile bir değişkene atılıp browser’ a gönderilmektedir. Bu nedenle kullanıcı dosya yolunu göremeyecektir. Ayrıca dosyaları site root’ unun dışına koyarak yazdığımız ASP dışında bir yolla indirilmesini tamamen de engelleyebiliriz. <%@language=”vbscript”%> <% dim stream dim content dim filename dim saveas saveas=”dosya.zip” filename = “files/dosya.zip” filename=server.mappath(filename) response.contenttype = “application/x-msdownload” response.addheader “content-transfer-encoding”, “binary” response.addheader “content-disposition”, “attachment;filename=”& saveas set stream = server.createobject(”adodb.stream”) stream.mode = 3 stream.open stream.loadfromfile filename content=stream.readtext(-1) response.binarywrite(content) stream.close set stream=nothing content=null %> Eğer dosyamızı download şeklinde değil de stream ederek göndermek istiyorsak response.contenttype = “application/x-msdownload” response.addheader “content-transfer-encoding”, “binary” response.addheader “content-disposition”, “attachment;filename=”& saveas satırlarını response.contenttype = “application/octet-stream” response.addheader “content-disposition”, “attachment;filename=”& saveas satırlarıyla değiştirmeniz yeterli olacaktır. Tabi ki stream etme olayını bir zip dosyası değil de media türü dosyalarda kullanmamız mantıklı olacaktır. Bu arada dikkat etmemiz gereken bir nokta var. ASP dosya içeriğini bir değişkene atıp sunucunun belleğinden browser’ a gönderdiği için microsoft.com’ da olduğu gibi download sayısını sunucumuzun kapasitesine göre sınırlandırmalıyız. |
| ||||
| Bir programda değişken çok önemlidir. Değişkenler, değişen değeri tutarlar. Mesela değişkenin adı Aylar ise, bu değişkenin değeri “Ocak, Şubar, Mart…” diye giden aylar olacaktır. Değişkenler, türlerine göre bir ya da daha fazla değer tutabilirler. Adı üstünde, değişken, her zaman değişir.. Bu değişikliği biz de yapabiliriz, program da yapabilir. Değişkenlerin tanımlanması “DIM” komutu ile yapılır. DIM, dimension “boyutlandır” kelimesinin kısaltılmışıdır. Tanımlayacağımız değişken adının önüne Dim yazarız. Mesela: <% Dim Ay, Gun, Sayi, İsim Ay = “Ocak” Gun = “Pazartesi” Sayi = 3 İsim = “BUSE” %> Burada önce değişkenlerimizi tanımladık. Birden fazla da değişkenimiz olabilir. Bunun için değişkenlerin arasına virgül koyarak yaparız. Değişken isimlerimizde Türkçe karakter kullanmamaya özen göstermeliyiz. Değişken isimleri mutlaka harfle başlamalıdır, içinde noktalama işaretleri bulunamaz ve uzunluğu 255 karakteri geçemez. Zaten 255 karakterden uzun bir değişken de işimizi zorlaştırır diye düşünüyorum ![]() Değişkenlerin isimlerini belirledikten sonra onlara bazı değerler atadık. Ay isimli değişkenimizin değeri “Ocak” oldu. Buna göre VBScript yorumlayıcısına, “VBScript yorumlayıcısı kardeş, Ay değişkeninin değeri nedir?” diye sorduğumuzda, “Bunu bilmeyecek ne var? Ocak’tır” diyecektir. Şimdi şöyle bir değişken tanımladığımızı düşünelim, acaba ortaya nasıl bir değişken çıkar? : <% Dim Aylar(12), Gunler(31), İsimler(10) %> Bu yöntemle oluşturduğumuz kodlarla elde edilecek “kaplar,” birden fazla değer tutabilir: <% Dim Aylar(12), Gunler(7), İsimler(10) Aylar(5) = “Mayıs” Gunler(2) = “Salı” İsimler(8) = “Hasan” %> Bu durumda, içinde 12 ayrı değişken tutabilecek olan Aylar değişkeninin 5 numaralı değeri “Mayıs”, 7 değer tutabilecek olan Gunler değişkeninin 2 numaralı değeri “Salı” ve 10 değer tutabilecek olan İsimler değişkeninin 8 numaralı değeri “Hasan” olacaktır. Böyle, birden fazla değer tutabilen değişkenlere Dizi Değişken veya Array denir. Array Fonksiyonu VBScript’ in kullanıma hazır bir çok fonksiyounu vardır, bunlardan biri olan Array ile kolayca dizi değişken oluşturabiliriz. Örneğin, Gunler(7) dizi-değişkenini isimler ile doldurmak istiyoruz: <% Dim İsimler = Array (”Pazartesi”, “Salı”, “Çarşamba”, “Perşembe”, “Cuma”, “Cumartesi”, “Pazar”) %> Böylece hem dizi değişkeni oluşturabiliriz, hem de değerlerini atayabiliriz. Buna göre daha sonra dizi değişkenin üyelerini sıra numarası ile çağırabiliriz: <%= Gunler(5) %> bize “Cumartesi” değerini verir. Neden mi? Çünkü dil tasarımcıları, sayı saymaya biz dünyalılar gibi 1′ den değil de 0′ dan başlarlar. Dolayısıyla Gunler dizi değişkeni Gunler(0)’ dan başlayacaktır. <html> <% Dim Degisken(2), Toplam Degisken(1) = “BUSE” Degisken(2) = “NUR” Toplam = Degisken(1) + Degisken(2) %> <%= Toplam %> </html> Bu sayfayı çalıştırdığımızda sayfaya BUSENUR yazıldı değil mi? (Arada boşluk olmayışına aldırmayın. Daha sonra göreceğiz.) Şimdi Değişken(1)’ in değeri olarak “BUSE” yerine tırnak içinde 3, NUR değeri yerine yine tırnak içinde 10 yazın. Şimdi sayfayı tekrar açalım. Sonuç? 310 değil mi? Şimdi tırnakları kaldırın 3 ve 10 ‘ un çevresinden. Sonuç? Doğru sonuç aldığınızdan eminim. Sayıların çevresinden tırnak işaretlerini kaldırınca VBScript bunların sayı olduğunu anladı ve işlemi ona göre yaptı. SABITLER (CONST) VBScript’ de bir kere tanımladığımızda bir daha değişmesini istemediğimiz unusurlar olabilir. Bunlara değişken diyemeyiz. Öyle değil mi? O zaman onlara Sabit Değerler diyelim. Sabit değer, bütün site boyunca yani uygulama boyunca değişmeden kalır. Bu değerleri Const (constant, sabit kelimesinden türetilme) komuyutla yaparız: Const Siteadi = “ASPnedir?com” Const Slogan = “En iyi kaynak” VBScript’in kullandığı tek tür değişkene variant denir. Variant, karakter dizini (String) de olabilir, sayı (number) ‘ da. Fakat bir Variant’ın içindeki değer, veri olarak nitelendiğinde şu türlerden birine girer: Boolean: Değişkenin değeri ya True (doğru) ya da False (Yanlış) olur. True’ nun değeri -1, False’ un değeri ise 0′ dır. Byte: 0 ile 255 arasında bir sayısal değeri olabilir. Double: Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 4.9E-324 ile 1.8E308 arasında, negatif sayılarda -4.9E-324 ile 1.8E308 arasında bir değer alabilir. Date/Time: Önceden belirlenmiş biçimlerde tarih ve zaman bilgisi içerir. Empty: Tanımlanmış ancak henüz değer atanmamış (boş) değişken türüdür. Error: Programın hata mesajlarını ve hata değerlerini tutar. Integer: Noktalık bölüm içermeyen tamsayı verilerdir, değeri -32.768 ile +32.767 arasında olabilir. Long: Noktalık bölüm içermeyen tamsayı verilerdir; değeri -2.147.483.648 ile 2.147.483.648 arasında olabilir. Null: İçinde bulunmamak üzere tanımlanmış değişkenlerdir. Object: Windows OLE nesnelerini tutmak üzere tanımlanmış değişkenlerdir. Single: Yüzen noktalı değer denilen veri türüdür. Pozitif sayılar için 1.4E.45 ile 3.4E38 arasında, negatif sayılarda -1.4E-45 ile -3.4E38 arasında bir değer alabilir. String: Alfanumerik veri tutan değişkenlerin değeridir. |
| ||||
| AspHttp şuanda başka sitelerden bilgi almak için kullanılan bileşenlerin arasında benim en iyisi olarak gördüğüm bir bileşendir. AspTear ve XmlHttp ile başka web istelerinden bilgi alımı yapılabilir ama kullandığınız Server’da AspTear veya XmlHttp yoksa ama AspHttp varsa işte size çözüm: AspHttp’nin kullanımına geçmeden AspHttp’nin kurulumuna bir gözatalım. AspHttp’yi http://www.serverobjects.com/comp/asphttp3.zip adresinden indirebilirsiniz. AspHttp bileşeni deneme sürümüdür. AspHttp ile ilgili düşünceleriniz olumlu ise bileşeni kullanabilmeniz için satın almanız gerekiyor. AspHttp’yi kullanabilmeniz için asphttp3.zip içerisindeki “Asphttp.dll” dosyasını register etmeniz gerekmektedir. asphttp3.zip dosyasının içerisinde bulunan “Asphttp.dll” dosyasının Windows ‘un sistem klasörüne kopyalayınız (NT için ‘\winnt\system32′, Win9x için ‘\Windows\System’). Daha sonra “Başlat/Start” menüsünden “çalıştır/Run” menüsünü seçiniz. Açılan ufak pencereye “regsvr32 asphttp.dll” yazıp “Tamam” ‘ı tıklayınız. Bu sayede register işlemimiz gerçekleşecektir. AspHttp ‘nin Kullanımı: ısterseniz AspHttp ile istediğiniz web sitesinin tamamını (resimler hariç) gösterim yapabilirsiniz. AspHttpHTM.Asp <% Server.ScriptTimeout = 240 ‘Bağlantımızı Kuralım Set HttpObj = Server.CreateObject(”AspHTTP.Conn”) HttpObj.Url = “http://www.microsoft.com” rem HttpObj.Port = 80 rem HttpObj.TimeOut = 80 HttpObj.FollowRedirects = true HttpObj.RequestMethod = “GET” HttpObj.UserAgent = “Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)” strResult = HttpObj.GetURL ‘Sayfamızı Yazdılarım… Response.Write strResult Response.Write “<blockquote><hr>URL is now: ” & HttpObj.URL Response.Write “<hr><pre>” & HttpObj.Headers & “</pre>” ‘Bileşenimizin Kayıtlı Olup Olmadığını öğrenelim… Response.Write “<hr>” strRegName = HttpObj.RegisteredUser if Left(strRegName, 5) <> “Unreg” then Response.Write “Bileşenin Kayıtlı Olduğu ısim: ” & strRegName & “<br>” else Response.Write “Bileşen Kayıtlı Değil.<br>” end if %> ‘AspHttpHTM.Asp Bitti AspHttp ile yapabileceğimiz diğer bir işlem ise verilen web sitesi adresindeki tüm linkleri listeleyebilmektir. ASpHttpList.Asp <html> <body> <% Server.ScriptTimeout = 240 ‘Bağlantımızı Kuralım Set HttpObj = Server.CreateObject(”AspHTTP.Conn”) HttpObj.Url = “http://www.genusa.com/asp/tools.html” rem HttpObj.Port = 80 rem HttpObj.TimeOut = 80 HttpObj.RequestMethod = “GET” HttpObj.UserAgent = “Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)” strResult = HttpObj.GetURL ‘Linklerimizi Listeleyelim… Response.Write “<h2>A HREF Listesi</h2>” varHREFArray = HttpObj.GetHREFs intHREFArrayLimit = UBound(varHREFArray) -1 For I = 0 to intHREFArrayLimit Response.Write varHREFArray(I) & “<br>” & VBCrLF Next %> ‘ASpHttpList.Asp Bitti Bu bileşenin diğer bir avantajı başka web sitelerinden istediğimiz satır veya bilgiyi alabilmektir. Buna bir örnek olarak TR.Net sitesinden hava durumunu nasıl alabileceğimizi bir örnekle gösterelim: Hava.Asp <% ‘Bağlantımızı Kuralım set HttpObj = Server.CreateObject(”AspHTTP.Conn”) HTTPObj.Url = “http://www.tr.net” odunc = HTTPObj.GetURL ‘Sayada Ankara nın yerini belirleyelim. yer = Instr(1,odunc,”Ankara”) ankara = Mid(odunc,yer+89) son = Instr(1,ankara,”<”) son = son - “1″ ‘Ankara nın HavaDurumunu öğrenelim ankara = Mid(odunc,yer+89,son) ‘Sayada ıstanbul un yerini belirleyelim. yer = Instr(1,odunc,”ıstanbul”) istanbul = Mid(odunc,yer+103) son = Instr(1,istanbul,”<”) son = son - “1″ ‘ıstanbul un HavaDurumunu öğrenelim istanbul = Mid(odunc,yer+103,son) ‘Sayada ızmir in yerini belirleyelim. yer = Instr(1,odunc,”ıstanbul”) izmir = Mid(odunc,yer+103) son = Instr(1,izmir,”<”) son = son - “1″ ‘ızmir in HavaDurumunu öğrenelim izmir = Mid(odunc,yer+103,son) %> <html> <head><title>AspHttp ile TR.Net ‘ten HavaDurumu</title> <meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″> <style> table {font-family: verdana; font-size: 7pt}; </style> </head> <body> <table border=”0″> <tr><td>Ankara</td><td><%=ankara%></td></tr> <tr><td>ıstanbul</td><td><%=istanbul%></td></tr> <tr><td>ızmir</td><td><%=izmir%></td></tr> </table> </body></html> ‘Hava.Asp Bitti |
![]() |
| Konuyu Toplam 1 üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Konu Seçenekleri | |
| |
Okuduğunuz Konuya Benzer Konular | ||||
| Konu | Konuyu Açan | Forum | Cevaplar | Son Mesaj |
| Ücretsiz Scriptler İndex | MuratCem | Ücretsiz Scriptler | 189 | 01-09-2008 01:31:47 |
| Php Makale Scripti Yazmak Görsel Ders | GaziSoft | PHP | 5 | 29-04-2008 16:11:18 |
| seo ne seospam ne :D | dmrL | Yeni Başlayanlar | 15 | 04-10-2006 10:33:39 |