Sesiunea (sesiune) în Java, blog despre criptare

Când vizitați un client Web-resurse și de interogare opțiuni, informațiile despre clienți contextuale nu este stocat. În protocolul HTTP, nu există posibilități de a salva și de a schimba informații cu privire la vizitele anterioare ale clienților. Acest lucru duce la probleme în diferite nivele de acces distribuite sisteme c pentru utilizatori diferiți. Acțiunile care pot face administratorul de sistem nu poate efectua un oaspete. În acest caz, necesitatea de a verifica drepturile de utilizator atunci când se deplasează de la o pagină la alta. În alte cazuri, care necesită informații cu privire la cererile clienților anterioare. Există mai multe moduri de a stoca informații actuale despre conexiunile client sau client multiple la server.

Sesiunea (sesiune) - conexiunea dintre client și server, setați o anumită perioadă de timp în care clientul poate trimite la server orice număr de cereri. Sesiunea este stabilită în mod direct între client și server bazat pe web. Fiecare client stabilește propria sesiune de server.

Sesiunile sunt utilizate pentru stocarea datelor în mai multe interogări pagina web sau în prelucrarea informațiilor, introduse în forma personalizată, ca urmare a mai multor HTTP-conexiuni (de exemplu, un client face mai multe achiziții în magazin on-line, răspunsurile elevilor pe unele teste în sistemul de management al învățării) . De regulă, atunci când se lucrează cu o sesiune apar următoarele probleme:

· Suport pentru sesiune distribuită (sincronizare / replicare a datelor, identificatori unici etc.);

· Sesiunea de invalidare Problema (expirare), avertizând utilizatorul despre distrugerea sesiunii și posibilitatea prelungirii acestuia (watchdog).

Pentru a deschide o nouă sesiune, utilizați getSession () metoda a interfetei HttpServletRequest. Metoda preia de la transmis la sesiunea de clasă obiect HttpSession cerere servlet asociat cu utilizatorul. Sesiunea include informații despre data și ora ultimului acces
la sesiune, care pot fi extrase prin metode
getCreationTime () și getLastAccessedTime ().

Dacă metoda getSession (booleanparam) parametru de intrare este adevărat. controalele servlet container dacă o sesiune activă stabilită cu clientul. Daca va avea succes, această metodă returnează un mâner pentru sesiunea. În caz contrar, se stabilește o nouă sesiune:

HttpSession se = request.getSession (true);

apoi începe colectarea de informații client.

Pentru a păstra valoarea variabilei în sesiunea curentă, metoda setAttribute (HttpSession clasa). citește - getAttribute (). îndepărtați - removeAttribute (). Lista numele tuturor variabilelor care sunt salvate în sesiunea curentă, pot fi preparați folosind EnumerationgetAttributeNames) metoda (. Acesta funcționează la fel ca și metoda corespunzătoare a interfeței HttpServletRequest.

StringgetId () returneaza un identificator unic, care primește fiecare sesiune pentru a crea. isNew () returneaza false pentru o sesiune deja existentă și adevărat - nou creat.

Dacă doriți să salvați să utilizați una dintre variabila de sesiune este un număr întreg, atunci:

se.setAttribute ( "teacherId", new Integer (71));

După aceea, orice conectat la servlet sesiunea curentă poate citi valoarea teacherId a variabilei după cum urmează:

Integer = Cod test (Integer) se.getAttribute ( "teacherID");

Sfârșitul sesiunii poate invalida metoda (). Sesiunea distruge toate legăturile cu obiectele și datele stocate în sesiunea vechi vor fi pierdute pentru toate aplicațiile.

/ * Exemplu # 1 pentru a adăuga informații sesiunii: SessionServlet.java * /

publicclass SessionServlet extinde HttpServlet

publicstaticvoid printToBrowser (

HttpServletResponse respectiv, HttpServletRequest req)

HttpSession sesiune = req.getSession (true);

PrintWriter out = resp.getWriter ();

StringBuffer url = req.getRequestURL ();

out.write ( "contra mea sesiune:");

/ * Numărul de solicitări care au fost făcute la acest utilizator curent servlet în sesiunea curentă a utilizatorului (aceasta ar trebui să conducă la o valoare șir de trimitere pentru a afișa corect rezultatul) * /

out.write ( "
Timpul de creare. "

out.write ( "
Ora ultimului acces. "

out.write ( "
ID-ul de sesiune. "

out.write ( "
Adresa URL: „+ URL);

int TimeLive = 60 * 30;

out.write ( "
Setați intervalul inactiv max. "

> Captura (IOException e)

thrownew RuntimeException ( "a eșuat." + e);

/ * Crește numărul de referință la servlet actuală și o pune într-o sesiune * /

privatestaticint prepareSessionCounter (

Ca rezultat, browser-ul va fi afișat:

Deoarece datele de sesiune sunt: ​​clicuri contra - Integer tip de obiect și cererea URL-ul stocat în obiectul StringBuffer. Ca răspuns la zovatelsky Paul SessionServlet cerere servlet returnează o pagină HTML care afișează toate atributele de sesiune, timpul de creație, și acces la ultimul, ID-ul de sesiune, și timpul de invalidare (de viață) sesiunii. Acest timp poate fi setat cu ajutorul tag-ul de sesiune-config la web.xml în formă de:

în cazul în care timpul de așteptare este setat în câteva minute.

Următorul Exemplu abordat procesul de eliminare a sesiunii, în lipsa de activitate pentru o anumită perioadă de timp.

/ * Exemplu # 2 invalidare și eliminarea sesiunii: TimeSessionServlet.java * /

publicclass TimeSessionServlet extinde HttpServlet

pavilion boolean = true;

protectedvoid doGet (HttpServletRequest req,

privatevoid performTask (HttpServletRequest req,

HttpServletResponse resp) aruncă ServletException

HttpSession sesiune = null;

// crea sesiune și a stabilit invalidarea de timp

int TimeLive = 10; // Zece secunde!