![]() |
|
| |||||||
|
| WebMasTer SiTeSi |
| | Seçenekler |
|
#1
| |||
| | |||
Global.asax Dosyasının Etkin KullanımıVisual Studio .NET ile yeni bir proje yarattığınızda iki özel dosya da yaratılmaktadır. Bunlardan biri web.config diğersi ise global.asax dosyasıdır. Bu makalade global.asax dosyası içerisinde yer alan kısımlardan bir kısmına değinerek projelerinizde hangi kısımlarda kullanabileceğinizi inceliyor olacağız. Güvenlik İçin Global.asax Öncelikle global.asax dosyası sadece server üzerindeki uygulama içerisinde çalışan bir dosyadır, bunun anlamı dosya dışarıdan çağırıldığında istemciye asla görüntülenmeyecektir. Böylelikle güvenli bir şekilde bu dosyayı kullanabiliriz. Bir ek bilgi olarak aynı şekilde web.config dosyası da dışarıdan gelecek isteklere yanıt vermemektedir. Bunu örnekleyecek olursak; örneğin bir SQL Bağlantı cümlesini her sayfada ayrı ayrı yaratıp kullanmak yerine, bu iki dosyadan birinde yaratıp, içeriğini de registry içirisinde şifrelenmiş olarak tuttuğunuz bağlantı string'inden alabilirsiniz. Böylece güvenli uygulamalar noktasında ciddi bir adım atmış olacaksınız. ASP'deki Global.asa'dan Farkı Global.asax dosyası ASP ile uygulama geliştirmiş kişilere yabancı gelmemektedir, çünkü ASP 3.0'da da global.asa diye bir dosya vardı, ama sadece 4 olay ile ilgili işlem yapabiliyordunuz; SessionOnStart, SessionOnEnd, ApplicationOnStart, ApplicationOnEnd. Oysa ASP.NET'de yer alan global.asax dosyasında 16 farklı olay için kod yazabildiğiniz gibi ASP.NET 2.0 içerisinde bu sayı da artacaktır. Hemen bir örnek uygulama ile başlayalım; çok klasik olsa da bize Application ve Session konusunu iyi anlattığı için bu örneği yapacağım: "Sitede aktif kaç kişi var". Bunu nasıl bulabiliriz diye düşündüğümüzde, eğer siteye giriş yapan her kullanıcı için oturum bazında değişken olan Application değişkeninin değerini bir arttırır, siteden biri çıkış yaptığında bir azaltırsam bu Application değeri her zaman bana sitede kaç kişinin bulunduğunu verecektir. Nasıl yapıldığına kısa bir göz atalım: Global.asax Dosyası: Sub Application_Start(ByVal Sender As Object, ByVal e As EventArgs) Application("totalusercount") = 0 End Sub Sub Session_Start(ByVal Sender As Object, ByVal e As EventArgs) Dim CurrentUserCount As Integer Dim NewUserCount As Integer CurrentUserCount = CInt(Application("TotalUserCount")) NewUserCount = (CurrentUserCount + 1) Application("TotalUserCount") = NewUserCount End Sub Sub Session_End(ByVal Sender As Object, ByVal e As EventArgs) Dim CurrentUserCount As Integer Dim NewUserCount As Integer CurrentUserCount = CInt(Application("TotalUserCount")) NewUserCount = (CurrentUserCount - 1) Application("TotalUserCount") = NewUserCount End Sub Örnek kodda da görüldüğü gibi Application_Start olayında sitedeki toplam kullanıcı sayısını tutacak olan değişken olan totalusercount değişkeni 0 olarak belirlenmiştir. Ardından her yeni oturum açıldığında yani Session_Start anında toplam sayı bir arttırılmış, her oturum kapanışında yani Session_End anında toplam sayu bir eksiltilmiştir. Böylelikle site için yazacağım aşağıdaki gibi bir kod her zaman bana sitedeki aktif kullanıcıların sayısını verecektir: aktif_kullanicilar.aspx <strong>Sitedeki aktif kullanıcılar: </strong> <asp:Label id="aktif_sayi" runat="server" font-bold="True" forecolor="Blue"> <p><asp:Button id="cmd_Abandon" runat="server" Text="Abandon"></asp:Button></p> </asp:Label> Bu ASP.NET sayfasının arka planındaki kodda ise şunu yazmamız yeterli olacaktır: aktif_kullanicilar.aspx.vb Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load aktif_sayi.Text = Application("TotalUserCount").ToString() End Sub Görüldüğü gibi aktif_sayi adlı Label sunucu kontrolüne arka plandaki koddan sitede kaç kişinin olduğu bilgisini atadım. Örnek ekran görüntüsüne bakacak olursak: ![]() Görüldüğü gibi sitedeki aktif kullanıcı sadece ben olduğum için 1 sonucunu elde ettim. Bu sayfadan daha fazla sayıda açarsanız açtığınız sayı kadar sayının arttığını göreceksiniz. Şimdi ilginç bir şey dikkatinizi çekti mi? Nerden çıktı bu "© Mehmet Nuri Çankaya" ifadesi. İşte yeni bir özellikle daha karşı karşıyayız. Global.asax dosyamızda bulunan şu satır bize bunu sağladı: Global.asax Dosyası: Sub Application_EndRequest(ByVal Sender As Object, ByVal e As EventArgs) Response().Write("© Mehmet Nuri ÇANKAYA") End Sub Koddan da anlaşıldığı gibi sunucu tüm sayfaları ürettikten sonra hepsinin sonuna bir de Application_EndRequest kısmında bir ifade yazıldıysa bunu ekliyor. Böylelikle sitede standart olarak göstermek istediğiniz metinleri bu yöntemle ekleyebilirsiniz. Hata Oluştuğunda Event Log'a Kayıt Etmek Site içerisinde bir hata oluştuğunda bu hatadan haberdar olmak istiyorsunuz, böylece hatayı çözebilesiniz. Peki ama bunu nasıl yapacaksınız? Bunu yapmanın birçok yolu var, örneğin siteden sorumlu bir kişiye email gitmesini sağlayabilirsiniz veya bir veritabanı tablosuna kayıt ekleyebilirsiniz. Fakat tüm bunlardan önce zaten bu işler için yaratılmış olan ve kullanılan bir kısım var "Event Log"; buraya yazmaya ne dersiniz? Hadi hemen koda bakalım: Global.asax Dosyası: Sub Application_Error(ByVal Sender As Object, ByVal e As EventArgs) 'Hata Hakkında Bilgi Alınıyor Dim PageUrl As String = Request.Path Dim ErrorInfo As Exception = Server.GetLastError() Dim m As String m = "Şu sayfaya erişirken hata oluştu: " & PageUrl m = m & " hata kodu: " & ErrorInfo.InnerException.Message.ToString() 'Yeni bir EventLog yaratılıyor ASP_NET_LOG adında varsa referans veriliypr Dim ev As New EventLog("ASP_NET_LOG") 'hatayı event log'a yazıyoruz ev.Log = "ASP_NET_LOG" ev.Source = "ASP_NET" ev.WriteEntry(m, EventLogEntryType.Error, 5000) 'Kullanıcıyı düzgün bir hata mesajı verdiğimiz sayfaya yönlendiriyoruz Response.Redirect("CustomError.aspx") End Sub Metin Dosyalarına Bilgi Yazmak Peki ya örneğin bir kullanıcı çıkış yaptığında bunu sizin de görebileceğiniz bir metin dosyası içerisine yazmak isterseniz? Artık cevap tanıdık geliyor, bu işlemi de global.asax'de yapmalıyız. Nasıl mı? İşte global.asax kodu: Global.asax Dosyası: Sub Session_End(ByVal Sender As Object, ByVal e As EventArgs) Dim fs As New FileStream("c:\kullanici_cikislari.txt", FileMode.Append, FileAccess.Write) Dim LogStream As New StreamWriter(fs) Dim s As String Dim UserID As String UserID = Session("UserID").ToString() s = "Kullanıcı: " & UserID s = s & " çıkış yaptığı tarih " & DateTime.Now LogStream.WriteLine(s) LogStream.WriteLine("") LogStream.Close() fs.Close() End Sub Session_End yani kullanıcı oturumu kapattığı anda çalışacak olan kod sayesinde sabit disk üzerinde kullanici_cikislari.txt adında bir dosya yaratılır, varsa içerisine bilgi eklenecek şekilde açılır ve kullanıcı adı çıkış zamanı ile birlikte s string'i olarak eklenir. Açtığımız dosyayı da son satırda kapatmayı asla unutmuyoruz, yoksa bir diğer kullanıcı için hata verecektir. Özetle: Özet olarak global.asax dosyasında birçok olayı kontrol etmek ve sunucu taraflı kodlar yazmak mümkün. Bu kodlar bana uygulama dağıtımı açısından avantajlar sağladığı gibi aynı zamanda kolay yönetilebilen bir uygulama mimarisi sağlamaktadır. Farklı güvenlik önlemleri ve performans artışlarını global.asax dosyası ile uygulamak çok kolay yapılabilmektedir. |
![]() |
| Arama Etiketleri: dosyasinin, etkin, globalasax, kullanimi |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konu Açanlar | Forum | Cevaplar | Güncel Mesajlar |
| GmIRC.Net Global mIRC | tb2nch | Domain Satışı Ve Takası | 0 | 07-06-2008 09:55 |
| Global Power | B737 | Oyun | 0 | 05-03-2008 03:33 |
| Etkin TBM nedir ? | kadınca | Google Adsense | 0 | 24-02-2008 01:30 |
| Visual Basic’te Wav Dosyasının Çaldırılması! | Celebrian | Visual Basic & Action script | 0 | 24-12-2007 11:34 |
| Boot.ini Dosyasının Yedek Kopyasını Kaydetme | kadınca | İşletim Sistemleri | 0 | 23-11-2007 08:17 |
![]() |