Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Gestionarea sesiunilor

html



+ Font mai mare | - Font mai mic



Gestionarea sesiunilor

Asa cum am precizat in capitolele precedente, de fiecare data cand clientul trimite o cerere HTTP serverului de Web, este deschisa o conexiune noua. În particular serverul nu pastreaza informatii proprii fiecarui client de la o cerere la alta. Pentru a pastra astfel de informatii exista mai multe metode, dintre care am amintit actualizarea unui fisier sau a unei baze de date. Exista insa si o modalitate specifica servlet-urilor si anume crearea si gestionarea sesiunilor.



Un servlet poate crea (deschide) o sesiune intre un client HTTP si serverul pe care se afla servlet-ul. Sesiunea este inchisa cand intervalul de timp intre doua cereri succesive depaseste o valoare specificata sau, bineinteles, cand clientul inchide browser-ul.

Mai spunem ca o sesiune creaza o legatura persistenta intre client si server.

Sesiunii ii putem asocia obiecte care se pastreaza de la o cerere a clientului la urmatoarea. De asemenea o sesiune permite identificarea unui client la cereri repetate ale servletului de catre client.

Pentru lucrul cu sesiuni este folosita interfata HttpSession din pachetul javax.servlet.http.

Un obiect sesiune este creat prin invocarea metodei:

public HttpSession getSession(boolean)

cu argumentul true, de catre un obiect de tipul HttpServletRequest.

Unei sesiuni ii putem asocia atribute. Un atribut este un obiect care este atasat sesiunii sub un anumit nume (identificator).     Altfel spus, unei sesiuni ii putem asocia perechi (obiect, nume), fiecare obiect fiind accesibil prin precizarea numelui atasat.

Prezentam in continuare principalele metode, toate publice, ale interfetei HttpSession; timpul este masurat in milisecunde si anume de la 1 ianuarie 1970:

long getCreationTime()

intoarce momentul de timp cand a fost creata sesiunea;

long getLastAccessedTime() throws IllegalStateException

intoarce momentul de timp al ultimei accesari;

ServletContext getServletContext()

intoarce contextul servlet-ului caruia ii este asociata sesiunea;

void setMaxInactiveInterval(int interval)

specifica intervalul maxim, in secunde, intre doua cereri succesive; daca acest interval este depasit, sesiunea este invalidata. Un timp negativ corespunde unui interval infinit;

int getMaxInactiveInterval()

intoarce intervalul mentionat in metoda setMaxInactiveInterval;

Object getAttribute(String name) throws IllegalStateException

intoarce obiectul cu numele name asociat sesiunii;

Enumeration getAttributeNames() throws IllegalStateException

intoarce numele obiectelor asociate sesiunii;

void setAttribute(String name, Object obj)
throws IllegalStateException

asociaza sesiunii obiectul obj sub numele name;


void removeAttribute(String name) throws IllegalStateException

anuleaza asocierea la sesiune a obiectului asociat sub numele name;

void invalidate()

invalideaza sesiunea, inclusiv anuland asocierile existente.

Observatie. În cazul legaturilor persistente, lungimea continutului (Content Length), care este altfel ignorata, este importanta!

Exemplu. Dorim sa cream cate o sesiune pentru fiecare client, care:

la prima cerere, in care se furnizeaza numele si parola clientului, sa pastreze respectiva parola;

la urmatoarele cereri, in care este precizata o parola, sa permita accesul numai daca ea coincide cu cea din prima cerere;

sa tina evidenta numarului curent de cereri adresate de client servlet-ului in cadrul sesiunii.

Sesiunii ii este atasat, sub numele 'client' obiectul ObC de tipul clasei C; campurile obiectului ObC memoreaza numele, parola si numarul de cereri catre servlet. De mentionat ca la fiecare cerere admisa (cu parola corecta) trebuie sa asociem din nou sesiunii acest atribut, evident sub acelasi nume.

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

class C

}

public class Sesiune extends HttpServlet

else if (req.getParameter('parola').equals(ObC.parola))

else html += 'Parola incorecta.';

html += '<br> Daca doresti sa revii, introdu parola' +

' si apasa butonul!';

html += '<form method=GET action=' +

'https://localhost:8080/User/servlet/Sesiune>' +

'<input type=text name=parola value=parola>' +

'<input type=submit name=Buton value=Apasa>';

System.out.println('Accesari = ' + ++accesari);

sesiune.setAttribute('client', ObC);

html += '</form></body></html>';

out.println(html);

}

}

Sevlet-ul este invocat de fiecare client din browser prin cererea:

https://server:8080/User/servlet/Sesiune?nume=nn&parola=pp

unde nn si pp sunt numele, respectiv parola clientului.

Consideram cazul a doi clienti, primul cu numele 'Vasile' si parola '12345', iar al doilea cu numele 'Ion' si parola '6789'. Daca ambii vor invoca servlet-ul cu parametrii corespunzatori, browser-ul va afisa:

Sa presupunem ca in continuare:

Vasile executa o cerere gresita (cu parola incorecta), urmata de doua cereri corecte;

Ion executa doua cereri corecte si una gresita.

În aceasta situatie, browser-ul va afisa:

Observatie. Sesiunea constituie o alternativa la transmiterea de informatii intre paginile Web. De exemplu doua servlet-uri diferite (situate sau nu pe aceeasi masina gazda) pot deschide cate o sesiune pentru acelasi client. Acesta poate accesa primul servlet si obtine atribute ale sesiunii, pe care le poate apoi trimite celui de al doilea servlet.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1973
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved