1. Введение
План этой статьи
- Чтение файлов cookie HTTP
- Установить файлы cookie HTTP
- прочитать все файлы cookie[]
- Установить срок действия файлов cookie
- HTTPS и файлы cookie
- HttpOnly Cookie
- удалить куки
Файлы cookie HTTP (также известные какWeb cookie,куки-файлы браузера) — это небольшой фрагмент данных, который сервер хранит в браузере пользователя. Приложение на стороне сервера устанавливает файлы cookie, когда возвращает ответ на запрос браузера, браузер сохраняет файлы cookie и автоматически возвращает их серверному приложению при отправке следующего запроса.
Файлы cookie обеспечивают способ обмена информацией между сервером и браузером для управления сеансами (вход в систему, корзина покупок, счет в игре), запоминания пользовательских предпочтений (тема, принятие политики конфиденциальности) и отслеживания поведения пользователя на сайте. Файлы cookie в определенной степени снижают нагрузку на сервер, поскольку часть данных хранится на стороне браузера, поэтому эта часть данных не может быть данными, связанными с безопасностью приложения. В этой статье мы узнаем, как читать, устанавливать и удалять файлы cookie HTTP в приложении Spring Boot.
2. Чтение файлов cookie HTTP
Spring Framework предоставляет@CookieValue
Аннотация для получения значения файла cookie HTTP. Эту аннотацию можно использовать непосредственно в параметрах метода контроллера.
@GetMapping("/")
public String readCookie(@CookieValue(value = "username",
defaultValue = "Atta") String username) {
return "Hey! My username is " + username;
}
Обратите внимание, что в приведенном выше фрагменте кодаdefaultValue = "Atta"
. Если значение по умолчанию не установлено и файл cookie с именем пользователя не найден, Spring выдастjava.lang.IllegalStateException
аномальный.
3. Настройка файлов cookie HTTP
Чтобы установить файлы cookie в Spring Boot, мы можем использоватьHttpServletResponse
метод классаaddCookie()
. Все, что вам нужно сделать, это создать новыйCookie
объект и добавить его в ответ.
@GetMapping("/change-username")
public String setCookie(HttpServletResponse response) {
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
//将cookie对象加入response响应
response.addCookie(cookie);
return "Username is changed!";
}
4. Прочитать все файлы cookie[]
Помимо использования@CookieValue
аннотацию, мы также можем использоватьHttpServletRequest
Класс как параметр метода контроллера для чтения всех файлов cookie. Этот класс предоставляетgetCookies()
метод, который возвращает все файлы cookie, отправленные браузером, в виде массива.
@GetMapping("/all-cookies")
public String readAllCookies(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
return Arrays.stream(cookies)
.map(c -> c.getName() + "=" + c.getValue())
.collect(Collectors.joining(", "));
}
return "No cookies";
}
Пять, установите время истечения срока действия файла cookie.
Если для файла cookie не указано время истечения срока действия, его жизненный цикл будет продолжаться до истечения срока действия сеанса. Такие файлы cookie называютсясеансовые куки. Сеансовые файлы cookie остаются активными до тех пор, пока пользователь не закроет свой браузер или не очистит свои файлы cookie. Но вы можете переопределить это поведение по умолчанию и использовать классsetMaxAge()
метод для установки времени истечения срока действия файла cookie.
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); // 7天过期
//将cookie对象加入response响应
response.addCookie(cookie);
Сейчас,username
Срок действия файлов cookie не истекает после завершения сеанса, но остается действительным в течение следующих 7 дней. Перейти кsetMaxAge()
Время истечения метода указано в секундах. Дата и время истечения срока действия относятся к клиенту, установившему файл cookie, а не к серверу.
6. HTTPS и файлы cookie
Нам нужно понять концепцию: что такое безопасные файлы cookie? Защищенный файл cookie — это файл cookie, который можно отправить на сервер только через зашифрованное соединение HTTPS. Файл cookie не может быть отправлен на сервер через незашифрованное HTTP-соединение. То есть, если setSecure(true) установлен, cookie не будет передаваться в Http-соединении, а только в Https-соединении.
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
cookie.setSecure(true); //Https 安全cookie
//将cookie对象加入response响应
response.addCookie(cookie);
7. HTTP-файлы cookie
Файлы cookie HttpOnly используются для предотвращения атак с использованием межсайтовых сценариев (XSS), то есть файлы cookie с установленным параметром Http Only не могут передавать данные JavaScript.Document.cookie
Доступ к API может получить только серверная программа на стороне сервера.
// 创建一个 cookie对象
Cookie cookie = new Cookie("username", "Jovan");
cookie.setHttpOnly(true); //不能被js访问的Cookie
//将cookie对象加入response响应
response.addCookie(cookie);
8. Удалить файлы cookie
Чтобы удалить файлы cookie, вам необходимоMax-Age
Установите значение 0 и установите значение файла cookie равным нулю. Не делайтеMax-Age
Значение команды установлено на-1
отрицательное число. В противном случае браузер рассматривает его как файл cookie сеанса.
// 将Cookie的值设置为null
Cookie cookie = new Cookie("username", null);
//将`Max-Age`设置为0
cookie.setMaxAge(0);
response.addCookie(cookie);
Ждем вашего внимания
- Блогер недавно написал новую книгу:«Прикоснитесь к своим рукам, чтобы научить вас изучать серию SpringBoot — 16 глав, 97 разделов»
- Эта статья воспроизводится с указанием источника (должна быть ссылка, а не только текст):Блог Адетокунбо.