30 Mayıs 2014 Cuma

Django'da Çerez Kullanımı


       Bilgisayar terimi olarak çerez ; kullanılan web sayfaların sunucularının, kullanıcı bilgisayarının hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, çerez; web sitesinin bir sonraki ziyarette kullanıcıyı tanıması için geçerli bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Kullanıcıya özel bir tanımlamadır ve sadece çerezi tanımlayan web sunucusu tarafından okunabilir.



       Şimdi ufak bir örnekle çerezlerin nasıl çalıştığına bakalım. Örneğin; tarayıcımızı açıp google.com adresine gitmek istediğimizde, tarayıcımız Google'a aşağıdakine gibi bir  istekte bulunur : 


GET / HTTP/1.1
Host: google.com
...                                                                  
Google ise bu isteği aldıktan sonra aşağıdakine benzer bir cevap verir : 

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
            expires=Sun, 17-Jan-2038 19:14:07 GMT;
            path=/; domain=.google.com
Server: GWS/2.1
...
Bu işlemden sonra tarayıcımız Set-Cookie değişkeninin karşısındaki değeri kaydeder ve bundan sonra google.com adresine erişmek istediğinde Google sunucularına aşağıdaki gibi bir istek gönderir :
GET / HTTP/1.1                                                            
Host: google.com
Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671
...
Şimdi Django'da çerez kullanımını küçük bir örnekle anlamaya çalışalım. Geçen haftalarda kullandığımız örnek projemizde urls.py dosyasını açıp aşağıdaki gibi bir tanımlama yapalım :
url( r'^cerez-deneme/', yonetim.views.cerez_deneme),
Aşağıdaki görünümü yonetim/views.py dosyasının başına import random satırını ekledikten sonra ekleyelim :

def cerez_deneme(request):
    cerez_listesi = [u'cerez1',u'cerez2',u'cerez3',u'cerez4',                              u'cerez5',u'cerez6']

    if not 'cerezim' in request.COOKIES:
        
        cerezim = random.choice(cerez_listesi)                               
        response = HttpResponse(
            u'Daha önce çerezin yokmuş. Sana bir çerez oluşturdum :                <b> %s </b>' % cerezim.decode('utf-8'))                              
        response.set_cookie('cerezim',cerezim)
        return response

    else:
        cerezim = request.COOKIES['cerezim']
        
    return HttpResponse(
        u'Çerezinin adı : <b> %s </b>' % cerezim.decode('utf-8'))

Şimdi sunucumuzu çalıştırıp tarayıcımızın adres satırından aşağıdaki adresi isteyelim :
http://localhost:8000/cerez-deneme/

Tarayıcınızda bu görünüm tarafından denetlenen cerezim isimli herhangi bir çerez olmadığından, bir çerez ataması yapılacak ve size bildirilecektir :

yeni çerez oluşturuldu.
Django çerezleri request.COOKIES nesnesinde barındırır. Bu nesne bir sözlük gibi davranır. İlk bağlantı yaptığımızda cerezim isminde bir çerez bulunmayacaktır. Bu nedenle cerezler listesinden rastgele bir çerez seçilecek ve bu çerez response.set_cookie('cerezim',cerezim) ile tepki (response) nesnesine atanacaktır. response nesnesi istemciye gönderildiğinde istemci bu çerezi alıp saklayacaktır. Artık istemci  http://localhost:8000/cerez-deneme/ adresine her bağlanışta bu çerezi geri döndürecektir :

adrese yeniden bağlanıldığında

Çerezlerin ömrü varsayılan olarak tarayıcı kapanana kadardır. Ancak çerezi daha uzun süreli saklamak isteyebiliriz. Bunu response.set_cookie()'ye expires parametresini ekleyerek yapabiliriz. Örneğin; çerezimizin ömrünün on gün olması için görünümümüzü aşağıdaki gibi değiştirelim :   



import time
...
def cerez_deneme(request):
    cerez_listesi = [u'cerez1',u'cerez2',u'cerez3',u'cerez4',                              u'cerez5',u'cerez6']

    if not 'cerezim' in request.COOKIES:
        
        cerezim = random.choice(cerez_listesi)
        
        son_tarih = time.strftime('%a, %d-%b-%Y %H:%M:%S GMT',                                      time.localtime(time.time()+10*24*60*60)) 
        response = HttpResponse(
            u'Daha önce çerezin yokmuş. Sana bir çerez oluşturdum :               <b> %s </b>' % cerezim.decode('utf-8'))                       
        response.set_cookie('cerezim',cerezim,
                            expires = son_tarih)
        return response

    else:
        cerezim = request.COOKIES['cerezim']
        
    return HttpResponse(
        u'Çerezinin adı : <b> %s </b>' % cerezim.decode('utf-8'))





Ayrıca aşağıda verilen adreslerden tarayıcılarınızın çerez yönetimine bakabilir, çerez ömrünün değişip değişmediğini kontrol edebilirsiniz :

Chrome
Firefox
Internet Explorer


Referanslar :
  1. https://docs.djangoproject.com/en/dev/topics/http/sessions/
  2. http://www.djangobook.com/
  3. http://stackoverflow.com/
  4. http://www.djangobook.com/en/2.0/chapter14.html
  5. https://support.google.com/chrome/answer/95647?hl=tr
  6. https://support.mozilla.org/tr/kb/%C3%87erez%20Y%C3%B6netimi#w_aierez-penceresi
  7. http://windows.microsoft.com/tr-tr/internet-explorer/delete-manage-cookies#ie=ie-11

Hiç yorum yok:

Yorum Gönder