Sedenia

Niekedy si medzi dvoma zobrazeniami stránky potrebujeme zapamätať, aké údaje užívateľ zadal predtým. Typcký príklad môže byť nákupný košík v internetovom obchode. To znamená, že potrebujeme udržiavať medzi jednotlivými HTTP požiadavkami rovnaký kontext. Mohli by sme to spraviť tak, že by sme si pamätali IP adresy. To však nie je dosť spoľahlivé, pretože viacero browserov môže v danom okamihu zdieľať tú istú IP adresu (NAT, proxy a podobne).

Preto dáva HTTP protokol možnosť serveru uložiť si u klienta malé množstvo krátkych informácií. Tento mechanizmus sa nazýva cookies. Obvykle sa ako cookie u klienta ukladá krátky kľúč, pod ktorým je na serveri v nejakej databáze uložený celý kontext.

Django umožňuje pracovať s cookies priamo, alebo pomocou sessions. Priamo sa cookies pracuje pomocou funkcie HttpResponse.set_cookie a slovníka HttpRequest.COOKIES.

Sessions sú príjemnejšie; umožňujú priamo prístup ku kontextu, bez nízkoúrovňovej práce s cookies.

Aktivizácia sessions

Ak ste vytvorili projekt normálne, na začiatku by mali byť sessions aktivizované.

V tomto okamihu obsahuje každý HttpRequest (prvý parameter každej view) objekt session, ktorý sa chová ako slovník. Zmeny v session sa automaticky uchovávajú.

Obsah session je uložený na servri. U klienta je uložená iba jediná cookie.

Príklad:

   1 from django.shortcuts import render_to_response
   2 
   3 def addnumber(request,what):
   4 
   5     if not what or not 'numbers' in request.session:
   6         request.session['numbers']=[]
   7     else:
   8         try:
   9             what_int=int(what)
  10             request.session['numbers']+=[what_int]
  11         except:
  12             pass
  13     numbers=request.session['numbers']
  14     candidates=range(1,10)
  15     return render_to_response('add.html',
  16         {'numbers':numbers,'candidates':candidates} )
  17 
  18 def addnull(request):
  19 
  20     return addnumber(request,None)
  21 
  22 def sum(request):
  23 
  24     if not 'numbers' in request.session:
  25         request.session['numbers']=[]
  26     sum=0
  27     for num in request.session['numbers']:
  28         sum+=num
  29     request.session['numbers']=[]
  30     return render_to_response('sum.html',{'sum':sum} )
views.py

Toto je views z miniprojektu, ktory si pamätá v session zoznam čísel. Dokáže pridať do zoznamu nové číslo, alebo čísla sčítať a zoznam zmazať.

Celý projekt je tu: sessions.tar.gz.

Platnosť sessions

Normálne je session platná aj po zavretí browsera. Toto je možné ovplyvniť v  settings.py  pomocou nastavenia  SESSION_EXPIRE_AT_BROWSER_CLOSE .

ProgramovanieInternetovychAplikacii/Session (last edited 2009-04-28 16:31:59 by GejzaJenca)