# Управление на бисквитки (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);
```

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://programmingfundamental.gitbook.io/programmingwithjava/internet-tekhnologii/laboratorno-uprazhnenie-8/upravlenie-na-biskvitki-cookies.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
