Ответ
HTTP cookies — это небольшие фрагменты данных (пары ключ-значение), которые сервер отправляет в HTTP-ответе (заголовок Set-Cookie), а браузер клиента сохраняет и автоматически отправляет обратно с последующими запросами к тому же домену (заголовок Cookie). Они используются для управления сессиями, аутентификации, хранения предпочтений пользователя и отслеживания.
Основные атрибуты cookie:
- Имя и Значение: Основные данные.
- Domain и Path: Определяют, к каким запросам cookie будет прикрепляться.
- Expires/Max-Age: Время жизни. Cookie без этих атрибутов — сессионное (удаляется при закрытии браузера).
- Secure: Передаётся только по HTTPS.
- HttpOnly: Недоступно для JavaScript (защита от XSS).
- SameSite: Защита от CSRF-атак (значения: Strict, Lax, None).
Работа с cookies в автотестах (Selenium WebDriver на Java):
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class CookieTest {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://example.com");
// 1. Получить все cookies с текущей страницы
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie cookie : allCookies) {
System.out.println("Cookie: " + cookie.getName() + " = " + cookie.getValue());
}
// 2. Добавить новую cookie (часто для обхода аутентификации в тестах)
Cookie authCookie = new Cookie.Builder("session_id", "abc123")
.domain("example.com")
.path("/")
.isSecure(true) // Атрибут Secure
.isHttpOnly(true) // Атрибут HttpOnly
.build();
driver.manage().addCookie(authCookie);
// 3. Получить конкретную cookie по имени
Cookie sessionCookie = driver.manage().getCookieNamed("session_id");
// 4. Удалить cookie
driver.manage().deleteCookieNamed("session_id");
// или удалить все
driver.manage().deleteAllCookies();
driver.quit();
}
}
Важно для тестирования:
- Проверять, что критические cookie (например, сессионные) имеют флаги
SecureиHttpOnly. - Использовать предварительно установленные cookies для авторизации в E2E-тестах, чтобы не проходить полный UI-флоу логина каждый раз.
- Очищать cookies между тестами для обеспечения их изоляции.
Ответ 18+ 🔞
А, куки! Ну это ж та самая магия, из-за которой сайты тебя помнят, даже если ты, как последний мудак, пароль забыл. Представь: сервер такой — «на, братан, держи печеньку», а браузер её аккуратно в карман суёт и при каждом следующем визите вытаскивает: «смотри, я твой друг, вот моя печенька!». И всё, ты уже не анонимный бомж, а свой чувак.
Что за атрибуты у этой печеньки, чтобы она не протухла?
- Имя и Значение: Ну тут всё ясно — «сессия=абракадабра123».
- Domain и Path: Где эту печеньку показывать можно. Чтобы не тыкали её налево-направо, куда не надо.
- Expires/Max-Age: Срок годности. Если не указан — сессионная, то есть живёт, пока вкладку не закроешь. Закрыл — и всё, печенька сдохла.
- Secure: Передавать только по HTTPS, а то какой-нибудь хитрожопый посредник её перехватит.
- HttpOnly: Недоступна для JavaScript. Защита от того, чтобы какой-нибудь скрипт-гадёнок её не стырил через XSS.
- SameSite: Защита от CSRF.
Strict— вообще никуда не таскать,Lax— только для безопасных переходов,None— таскай куда хочешь, но только сSecure.
А теперь, как этим в автотестах рулить, чтобы не ебаться с логином каждый раз:
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class CookieTest {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("https://example.com");
// 1. Вытащить все печеньки, что уже есть
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie cookie : allCookies) {
System.out.println("Cookie: " + cookie.getName() + " = " + cookie.getValue());
}
// 2. Подсунуть свою, левую (например, для авторизации)
Cookie authCookie = new Cookie.Builder("session_id", "abc123")
.domain("example.com")
.path("/")
.isSecure(true) // Атрибут Secure
.isHttpOnly(true) // Атрибут HttpOnly
.build();
driver.manage().addCookie(authCookie);
// 3. Достать конкретную печеньку по имени
Cookie sessionCookie = driver.manage().getCookieNamed("session_id");
// 4. Удалить эту ненужную хрень
driver.manage().deleteCookieNamed("session_id");
// или почистить весь стол разом
driver.manage().deleteAllCookies();
driver.quit();
}
}
Что важно помнить, когда тестируешь эту кухню:
- Проверяй флаги, ёпта! Критические куки (сессия, токен) должны быть с
SecureиHttpOnly. Если нет — это дыра размером с Волгоград. - Не проходи UI-логин в каждом тесте, ебать ты консерватор! Залогинься раз, вытащи куку, и подкладывай её в начале остальных тестов. Экономия времени — овердохуищная.
- Чисти за собой! Между тестами удаляй куки, чтобы они не влияли друг на друга. Иначе один тест наложит, а второй словит неожиданный пиздец. Изоляция, мать её!