Управление на бисквитки (Cookies)

Бисквитките са текстови файлове, съхранявани на компютъра на клиента, съдържащи разнообразна информации с цел подпомагане на комуникацията между клиента и сървъра. Java сървлетите са проектирани да поддържат HTTP-бисквитки. За идентифициране на вече регистриран потребител например може да се осъществи следния процес в три стъпки:

  • сървърът изпраща набор от бисквитки на браузъра. Например име, възраст, или идентификационен номер и т.н.

  • Браузърът съхранява тази информация на локалната машина за бъдеща употреба.

  • Когато следващия път браузърът изпраща заявка за уеб сървъра, той изпраща също и тези бисквитки с информация към сървъра, който от своя страна използва таз информация за идентифициране на потребителя.

Анатомия на бисквитките

Cookies обикновено се изпращат с HTTP хедъра (въпреки че JavaScript също може да изпрати бисквитка директно на един браузър). Сървлет, който създава бисквитка, може да изпрати хедърите по следния начин:

HTTP/1.1200 OK
Date:Fri,04Jan201421:03:38 GMT
...
Set-Cookie: name=xyz; expires=Friday,04-Feb-1022:03:38 GMT;
path=/; domain=javaeecode.com Connection: close
Content-Type: text/html

Ако браузърът е конфигуриран да съхранява бисквитки, то тогава тази информация ще се запази до времето на изтичане на валидността. Ако потребителят задава адреси в областта на указания в параметъра “path” домейн, браузърът за всяка страница, която съответства на пътя и домейна на бисквитката, ще я изпраща до сървъра. Хедърите на браузъра може да изглеждат по следния начин:

GET / HTTP/1.1
Connection:Keep-Alive
...
Host: zink.demon.co.uk:1126
Accept: image/gif,*/*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

След което сървлетът ще имат достъп до бисквитката чрез метода request.getCookies(), който връща масив от Cookie обекти.

Методи на сървлета за работа с бисквитки са:

  • public void setDomain(String pattern) – определя домейна, за който ще се прилага бисквитката;

  • public String getDomain() - получава домейна, за който ще се прилага бисквитката;

  • public void setMaxAge(int expiry) - определя колко време ( в секунди), трябва да се изчака, преди да изтече бисквитката. Ако не се зададе, валидността на бисквитката ще изтече в рамките на текущата сесия.

  • public int getMaxAge() - връща максималното време за валидност на бисквитката;

  • public String getName() - връща името на бисквитката. Името не може да се променя след създаването.

  • public void setValue(String newValue) - определя стойността, свързана с бисквитката;

  • public String getValue() - получава стойност, свързана с бисквитката;

  • public void setPath(String uri) - определя пътя, към които се прилага тази бисквитка. Ако не се укаже пътя, бисквитката се връща за всички URL адреси, разположени в директорията на текущото URL, както и всички поддиректории;

  • public String getPath() - получава пътя, към които се прилага тази бисквитка;

  • public void setSecure(boolean flag) - определя булева стойност, показваща дали бисквитката трябва да бъде изпращана само чрез криптирани ( т.е. SSL ) връзки;

  • public void setComment(String purpose) - определя коментар, който описва целта на бисквитка. Коментарът е полезен, ако браузъра трябва да покаже бисквитката на потребителя.

  • public String getComment() - връща коментар, описващ целите на конкретната бисквитка, или нула, ако бисквитката няма никакъв коментар.

Създаване на бисквитка със сървлет

Cookie cookie =new Cookie("key","value");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);

Стойността и името на бисквитката не може да съдържат интервали или някои от следните символи - []()=," / ? @ : ;

Last updated