Sabit Disk üzerinde Bisküviler Cookies, Web Server'ların kullanıcıya ait PC'nin lokal sabit diskine aktardıkları bilgilerdir. Cookies ile neler yapılabildiğini ve Javascript ile birlikte kullanımı kursun bu bölümünde. JavaSeripi kursunun sonunu geldik. Kurs boyunca değişken tipleri. metinlerin ve resimle rin gösterilmeleri, matematiksel fonksiyonlar ve Franıe'leı gibi temel konulan öğrendiniz. P*da ayrıntıya inmeden .sizlere Seripı dilini tanılan Kurs Bölümleri CHIP 6/97 Temel bilgiler, Web sayfasında metinlerin gösterilmesi, tarih fonksiyonu CHIP 7/97 Fonksiyonlar, değişkenler, formlar. evalO fonksiyonu CHIP 8/97 Matematik objeleri ile bilimsel hesaplamalar CHIP 9/97 Çerçevelerle çalışmak CHIP 10/97 JavaScripruı geleceğine bakış ve bir başlangıç yapmanızı sağlayan JavaScript kursunun yapısı son bö' lumde de aynı. JavaScript ile (lookie* oluşturmanın yollarım ögreneceksi' niz. Cookies. Wcb sever tarafından Online kullanıcının lokal sabit diskine yerleştirilen bilgilerdir. Bu veriler yeni bir sayfa açılması sırasında gönderilir. Internet üzerinde gezinti yap mak için Netscape Navigator'u kullanıyorsanız. programı kurdurunuz dizinde 'cookie.m" dosyasını bulabilirsiniz. Bu dosya gerekli bilgilen içerir. VlicrosoiVun Internet Explorer'ın-da ise durum farklı. Exploıer Co-okie'leri prngram dizinine depolumı-yor. bunun yerine Windows dizini içinde "Cookies" isminde özel bir dizin açıyor ve oraya kopyalıyor. Peki Cookie'Icr neden kullanılırlar? Web sayfası tasarla)insi neden kullanıcının lokal sabiı diskine veri aktarmak İhtiyacı duyar? Buradaki amaç gözetlemek. Ancak paniğe kapılmanıza gerek yok. Cookies üzerinden, \Veb Server'ın Cookie dosyasına yazdığı bilgiler dışındaki verilere. erişme imkanı yok Yani Wrb savlası tasarlayıcısının Cookies sayesinde sizin erişilmesini istemediğiniz bilgileri edinmesi gibi bir lehlıke söz konu.su değil. Kural olarak Cookies Web sayfası ile iletişimi iyileştiren bilgiler içerir. Örneğin: kullanıcı hangi sayfadan geldi? Aktif Web sayfası daha ünce ziyarel edildi mi? Ayrıca abonesi oldurunuz bir sayfaya giııiğinizde kullanıcı adı ve şifre bilgileri sizin yazmanıza gerek kalmadan otomatik olarak okunabilir. Diğer bir uygulama örneği ise. bir Online katalogu ziyaret ettiğinizde doldurabileceğiniz sanal bir alışveriş sepeti. Böylece sipariş İte birlikte sa-iış işlemi haşlamadan önce veriler Cookie olarak depolanabilirler. Böylece komplike Cül Seri pt' I er in in yazılmasına gerek kalmaz ve Server daha serbest kalır. JavaScript Web Brmvser'ın yardımı > 162- CHkP ıİM 19*7 I nternet ,>yı> -: -m^mm String Objesi JavaScript her karaklcr dizisini String objesi olarak kabul eder. Bir String objesi yataııpbunu "t" değişkenine eklemek için şu salar yazılmalıdır: var l = new SıringO; *t* değişkenine belli bir değer (örneğin CHIP) vermek istediğinizde i-se şu komutu kullanmalısınız: var ı = nc\v Stringi"Chip"î; Bir obje yaratmak için muılaka "116ı" ifadesini kullanmak zorunda değilsiniz. Basil şekilde karakterleri yazarak da String oluşturabilirsiniz. Örneğin t = "Clıip"; geçerli bir String objesidir Özellikler; Sı ring objesinin sadece bir özelliği vardır: "lcngtir. Bu (ızel- ile Cookie bilgilerine erişim imkanını da veriyor. Bir Cookie kendini içinde bulunduğu Server, ismi ve değeri ile İlk satırda utmuyor. Bununla birlikte ek değerlere sahip olması da mttmkün. Daha önce depolanmış olan hır Cookie ile aynı isimde başka bir Cookie alındığında eskisi siliniyor. Erişim "documem'' objesi üzerinden gerçekleşiyor. Obje "cookie" özelliğini (aşıyor. Omegin "test" isminde ye ''Merhaba" değerini taşıyan bir Cookie üretmek için gerekli ulan JavaScripi sanrı şöyle: Belirtilen değer özel ya da Türkçe karakterler ile boşluk karakterine sahip olduğunda konini daha karmaşık bir hat alıyor. Bunlar bir Cookie de geri içinde kul tanılamıyorlar. Kullanıcının bu karakterleri ya biç yazma - lik String'' oluşturan karakterlerin IndcxOf{\\.\'. po$): *xx" ifadesinin sayısını gösterir, "t" değişkeninin bulunduğu ilk indeks değerini vrrir değer olarak "Chip" karakter dizisi- Arama "pos" değerinden itibaren ne sahip olduğunu kabul edersek, yapılır. var n = t.length. safın n" değişkenine 4 değerim verir. Önemli roeiodlan Bir indeks üzerinden String'ın her karakterine ulaşabilirsiniz. Sıring'in birinci karakicri indeksle 0 delerine sahiptir ikinci karakter l değerini, diğerleri ist aynı şekilde sıralamaya uyarak diğer değerleri alırlar. Bu durumda son karakterin değen "length" özelliğinin I eksiğidir. String operasyonları sırasında buna dikkat etmek gerekir. Kullanılan önemli metodlar şöyle: charAt(indeks): İndeks ifadesi ile belirtilen harfi verir. ması ya da önceden dönüştürmesi gerekiyor. Bu noktada JavaScript es-capeO ve unescapeO mctodları İle yardımcı oluyor. "escapeO" verilen karakter dizinini, içindeki özel karakterleri %xx modeline uydurarak donuşiûnıyor. Buradaki "xx" ifâdesi özel karakterin sahip olduğu kodu lastlndexOfC~xxB, pos): ): "sx" ifadesinin bul urıdugu son indeks değerini verir. Arama Şirindin son karakterinden başlar. substrmgtposl, pos2): Sıring objesinin belli bîr hölnmlınü verir. "posI" İfadesi bu bolümün ilk karakterinin değerini belirtir. Dolumun sun karakterinin değeri "pos2" ile belirtilen değerden I eksiktir. toLowerCase(): Sıring objesinin I um karakierlerini küçı'ık harfe çevirir. Bİr değer belirtmeye gerek yoktur. loUpperCase():Siring objesinin tuıu karakierlerini büyük harfe çevirir. Bir değer belirtmeye gerek yoktur. belirtiyor. Sayıların ve basil harşerin dönüştürülmeleri gerekmiyor. Örneğin '-Netscape Navigalor" ifadesi "Neucape%20Navigator" şeklinde dönüştürülüyor. "une,scape(>" metodu İse bunun tanı tersini yapıyor. içindeki osel karakterler %xx modeline göre dönüştürülmüş ulan > Tedbirli olmak gerek: Gerekli seçenek aktif olursa Browser Cookie ile karşılaştığında haber veriyor. '. af 164 İCHiF EKİM 1997 ;:;¦,':-un:* ^v.-., karakter dişilerini tekrar eski halleri-nc getiriyor*. isim, Değer ve Tarih ile Bir Cookie Üretilmesi Bir Cookie üretmek itin yazabileceğimiz YapCookieO metodu şu şekilde ülmab.' lunciion YapCookie(Isinı, Değer. Tarih) ( if(Tarih!=null)i var expires - larih.ıoGMTSî ringi);) documeıit.cookie = İsini * **v + escape(Dcgeı} *' ü;expirc>^" t cxpires:i M et od "isim". "Değer" ve "Tarih" parametreleri ile çalışıyor. Asıl önemli okular "isim" ve "Değer". "Tarih" Cookie'nin İleride açıktana- Cookie'leri Yakalamanın Yolları Netsacape: Normalde Netscape Cookie'leri hiçbir uyan yapmadan lokal sabit diske aktarır. Ancak, bir Cookie ile karşılaştığında Neisca-pe'in haber vermesini sağlayabilirsiniz. Bunun için OPTIONS -NETVVORK PRIFERENCES PROTOCOLS bölümüne geçin. Burada bulunan "'Accepüng a Cookie" ifadesini aktif duruma getirin. Artık bir Web sunucusu I'Cm-ze veri aktarmak istediğinde Netscape size haber verecek ve gerektiğinde. bunu engelleyebileceksiniz. İnternet Explorcr: MicrosolVun \Vcb Brovvserı da aynı şekilde Co-okieİen alırken size sorma gereği hissetmez. Ancak Internet Explo-rer'ın da Cookie ile karşılaştığında size haber vermesini sağlamanız mümkün. Yapmanız gereken VI-EW - OPTIONS - Advanced kısmına geçmek ve ~Warn belore aceepling cookies" ifadesini aktif duruma getirmek. mmmmmmmmmmm>am *İ>Hi.l Cookie'nin yapısı: Bu HTML dosyasındaki YapCookieO metodu verilen isim, değer ye tarih ile bir Cookie üretiyor. ¦ " "- I ' '¦ lî ıMxh —ıw:;ı : vaı f*t>ırİn • T.Ml.-.^İHIStıiEjrı! >hcva.fi ?İ*!• - itiı tipegtr) ¦ ı"pllSÎ.- ı ¦;¦ > .... '*.,>¦'¦¦¦>¦.-¦,¦*•'•.•, rvMMüa -.&:> --ii *.¦¦¦ cak olan ''son gunu'nu belirtiyor. Aşağıda gösterilen Docu meni. cookie = Lsim - "=" + eşcapetDeger: komutu, >lsım>=>D>-gcr> modeline göre "İsim'' ve "Değer" değişkenlerinin değerlerini beîirliyor ve bunları "docunient" objesinin "Cookie^ özelliğine ekliyor. Aynı komul satırında "Değer" degışkenirıdcki özel karakterler escape.() komutu ile dönüştürülüyor. Drowser'm uygun isim ve değer ile Cookie'yi ( varsa, aynı isimdeki dı&er bir Cookie'yi silerek! depolaması için bu komut satırları yeterli. Brow$er Cookie değerini ISro\vser penceresi kapatılana kadar aııabel-lekte tutar. Ancak pencere kapat ıl-dıkian sonra Cookie Nıivigator tarafından kullanıcının sabit diskim' aktarılır Belli Bir Cookie'nin Okunması Depolanmış bir Cookie'nin değerini tekrar okumak için karmaşık bir fonksiyona ihtiyaç var. Bu İşlemi iki metoda yayarak daha anlaşılır bir duruma getirebiliriz: AİCookicO ve Al-CookieDegerü. ftıuçıion AİCookie(isim) i İsim * Isım + "="; var Uzun = Isiın.lengıh; var Cookie_Uzıın = documeoı ıookie.len&th; var i *= 0; vvhile (i > Cookie_Uzun) l var i = ı + Uzun: if (docunıeni.cookie.subst ringim) == İsim) :>:iiırıı AlCookieDeger(j>; i = docume.nt.eookie.inde xOtT\i)^l; İf()==0ı; break;| retum null'J funetion AlCookıcDeger(Durum) l var Son = doıumem.eoukie.ın dcxOf( ";". Durura); if(s,on =¦=-!) Son * docunıent.cookielengıh: return unescapeidocumcnt.co okic. sııbsiriugCDurunı, Sem)); I AİCookicO metodu Conkies'in içe-ligini okuyor. Alınan değer Servet üzerindeki uiııı Cookic'lcrı kapsıyor. AlCooki-eDegerO metodu ise ismini beÜi'Uİ-giniz Cookie'nin değerini elde etmenizi sağlıyor. > 166 • CHLF [KİM 199; ' ¦•¦''¦:| L ¦ ı. *.:.,.-_ - |VİuriJi)af. ItH. //JCJA^N1>HW;,^î1!;MmJIi-İ-^.>*ii1| Bir Cookie 'ain okunman: A/Cookieö ve AİCookieOegerO metodlan sayesinde belli bîr Cookie'nin değerini okuyan HTML sayfası bu yapıya sahip (Netscape penceresinde gösterilen program kodu tek pencereye sığmadığı için iki resim olarak verdik). İlk olarak AİCookİeO metodu uygun Cookie '/eri belirtiyor, daha somu bu metod içinden çağrılan ve İkinci resimde görebileceğiniz AİCookieOegerO metodu seçilen Cookie'nin değerinin belirlenmesini sağlıyor. m& -.latif >oııtt lİı^ıİBf•'".'-,"ıi-.. _, . ' > : ÎBİH ı iıİn - *-*i mt Uf"" " :"İ '•'-¦!' :¦: vs! spofcüı 'Htm ¦ Vat - - 0-' HÛ)' '¦' ' '^"ııİ__*¦!• ıı^! t w*r I - V - £(UBi i .- 9M'anî6î;eoftxıı.ıınîex-îi*",- il İ ıs. ıı Ü — o;, I -M****- |*>uİİ"> r*.İ/r(.'WlHI)ltW1/I>n-t"v'"t™t''N-*l FtRş acn* ¦>ı"JW|i'FJC>t;e.lİDQS_lı; ¦r/i... a- İCilpt lıİOU*l|o--[-v:---'---> ,.' V.- "înst'l; İ/mırlp'> Tarih Çalışma Süresini Belirtiyor Cookies'i üretme ile okuma arasında Navigaior'ı kapatıp, yeniden çalıştırırdanız Cookie kullanımda olmaz Coofcietet belli bir tarihe kadar aktiftirler ve okunabiliıler. Bir Cookie'nin Kangl (arihe kadar okunabileceğini belirtebilirsiniz. Bunu belirtmezseniz sadece Brow5er kapanana kadar aktif olur. Simdi YapC.ookieO metodunda belirtilen Tarilıin anlamını ögrenebilir-SÜljZ, Bu Cookie'nin son kullanım ta rihiıû gösteriyor. Parametre örneğin 12.09.1997 gibi sıfırdan farklı bir değer taşıyorsa. C-MTSıring() metodunun yardımı ile doğru biçime doııuS-rtmıİHi. ÇünküJnvaScıipi tarih girişlerinin "Mon, 28 Apr 1997 13:30:24 GMT" gibi Özel bir biçimde olmasını isler. Dönüştürülen bü tarih ifadesi İle Cookie değerine eklenir. Cookies'in Üzerine Yazılma ile Silinmesi Peki anık İhtiyacımız olmayan bir Cookic'yi ne yapacağız? Tabii ki sileceğiz. Ancak bir Cookic'yi silmek o kadar kolay değil. Bu nokrada küçük bir chîpucuna ihtiyaç var: )a-vaScrİplaym ismi taşıyan bir Cookie ile karsı I aşlığında bunu eskisi İle de-gişiiriyor Bu özelliklen faydalanıp. silmek islediğiniz Cookıe'yi eski tarihli (son tarih' bir Cookie ile değiştirebilirsiniz. Böylece Cookie direkt olarak kullanımdan çıkar ve erisile-mez duruma gelir. Bunun için kullanılabilecek metod şöyle: funcıion SÜCookie(lsim) ( var SonTafih = new Halet); SonTarih..selTime( SonTarih.geiTimeü -1): var Cookie..,Degcr ç Ak .o okietlsim): il' (Cookie _Deİer !=nullî ... dıieument.eookie=lsİıtı . *•= i Cookie_Deger + -^piresı".. _ .fepîarihaoCMiŞtriı^oy Metod "SonTiiriir isimli tarih objesini yaranyor ve bunu "selTimeO" ile milisaniyeye çeviriyor. Sonuçlan 1 çıkarılıyor. Daha sonra "io(iMT5ı-rıngO" ıncıodu ile sayı tekrar tarih biçimine dönüştürülüyor. Son olarak Cookie. yeni tarih ile lekraroluş tııruluyor tookic-me Kimler Erişebilir? Sabiı diskte fiirklı Cookic'lcr bulunmasına karşın herServer bunlara erişemez. Her Cookie kendisim aktaran Web Servcr tarafından tanım lanır. Örneğin CHİP Server'ı İ'C'nize bir Cookie yerleştirmeydi, içerisinde "FMnşr.chipjMm.lr" ifadesi bulunurdu. Böylece bu Cookie'yl sadece CHİP server'ı okuyabilirdi. Farklı adrese sahip Wcl> sunucuları bu verilere erişemezlerdi. JavaScript'in Geleceği Nasıl olacak? Aktüel Scripı dilinin sûrumu l.l. Bu, 3.x sürüınlü tüm Navigator programlarına eklenmiş durumda. Coııımunicaior sürümleri ise JavaScript'in 1.2 sürümüne sahipler. Ayrıca Neıscape özel bir geliştirme ortamını da Beta olarak sunuyor: Vi-SUal Java. Bu özellikte Inlranet'lerini JavaScript ile geliştirmek isleyen şirketlerdeki programcılar ıçm düşünülmüş. Böylece JavaScript kursu sona erdi. Sizlere JavaScripri tanıtan ve temel bitgüerı edinmenizi sağlayan bu kursun ardından, JavaScript konusunda kendinizi kolayca geliştirebilirsiniz. S 168* CHlF (KİM 1997