# Stałe sesje i rotacja IP: ID sesji, TTL i ponowne użycie połączenia

> Jak działają stałe sesje i rotacja IP na bramce proxy rezydencjalnego: ID sesji, TTL, ponowne użycie połączenia per biblioteka, i pula sesji.

- URL: https://crawlrelay.com/pl/docs/sessions/
- Ostatnia aktualizacja: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Rotacja działa na poziomie połączenia, trwałość sesji na poziomie ID sesji. Gdy wiesz, jak Twoja biblioteka używa połączeń, możesz precyzyjnie zdecydować, kiedy IP się zmienia.

**Szybka odpowiedź — Jak działają stałe sesje i rotacja IP na proxy rezydencjalnym?**

Na **CrawlRelay**, nazwa użytkownika bez ID sesji dostaje IP z puli przy każdym nowym połączeniu TCP, zwykle inne, a `-session-<id>-ttl-<minutes>` trzyma jedno IP dla tego ID przez do 30 minut, choć IP może się zmienić wcześniej. Rotacja dotyczy połączeń, nie żądań HTTP, więc utrzymanie połączenia decyduje, kiedy IP naprawdę się zmienia. Ruch proxy rezydencjalnego kosztuje 0,50 USD/GB od 50 GB. Płatne w crypto, bez KYC.

## Zasady sesji w pigułce

| Atrybut | Wartość |
| --- | --- |
| Jednostka rotacji | IP z puli na każde nowe połączenie TCP, zwykle inne |
| Sesja stała | `-session-<id>-ttl-<minutes>` dodane do nazwy użytkownika |
| Długość sesji | do 30 minut |
| ID sesji | 1–32 litery lub cyfry; jedno ID na przepływ |
| Co kończy sesję wcześniej | Urządzenie rezydencjalne stojące za nią tracące połączenie |
| Wspólne ID | Klienci wysyłający to samo ID korzystają z tego samego exit |
| Koszt | Brak: sesje i rotacja są wliczone w cenę za GB |

## Co się dzieje na bramce, gdy wysyłam ID sesji?

Bramka odczytuje nazwę użytkownika przy każdym nowym połączeniu. Bez części sesji wybiera proxy rezydencjalne, które pasuje do Twojego targetowania tylko dla tego połączenia. Z częścią sesji utrzymuje ten sam exit dla tego ID przez ustalony przez Ciebie TTL.

Sticky IP to prawdziwe łącze domowe, które może zniknąć przed końcem TTL: urządzenie jest wyłączone, traci Wi-Fi lub zmienia sieć. Długie sesje muszą to przetrwać, sprawdzając IP wyjścia na checkpointach i restartując od checkpointu zamiast przerywać całe zadanie.

## Jak każda biblioteka ponownie wykorzystuje połączenia?

Jeśli biblioteka utrzymuje połączenie przy życiu, każde żądanie na nim korzysta z jednego exit. Dzięki temu możesz świadomie uzyskać każdy z tych zachowań.

| Biblioteka | Domyślnie | Nowe IP przy każdym żądaniu | Jeden IP na flow |
| --- | --- | --- | --- |
| Python requests | `Session` utrzymuje połączenia przy życiu | Nagłówek `Connection: close` lub nowy `Session` dla każdego żądania | Jeden `Session` z ID sesji w nazwie użytkownika |
| httpx | Klient grupuje połączenia | `httpx.Limits(max_keepalive_connections=0)` | Jeden klient na ID sesji |
| aiohttp | `TCPConnector` grupuje połączenia | `TCPConnector(force_close=True)` | ID sesji w nazwie użytkownika proxy w URL |
| Scrapy | Grupy według danych uwierzytelniających proxy i hosta | `meta={"proxy_session": "new"}` z naszym [middleware](https://crawlrelay.com/pl/docs/scrapy/) | Stały `proxy_session` dla flow |
| Playwright / Puppeteer | Chrome grupuje według kontekstu | Nowy kontekst na stronę | Jeden kontekst na ID sesji |
| Node.js undici, axios, got | Agenci utrzymują gniazda otwarte | Nowy agent na żądanie lub wyłączone keep-alive | Jeden agent na ID sesji |
| curl | Jedno połączenie na komendę | Już tak jest | To samo ID sesji w każdej komendzie |

## Która strategia sesji pasuje do jakiego zadania scrapowania?

| Zadanie | Strategia | Sugerowany TTL |
| --- | --- | --- |
| Niezależne strony produktów, artykułów lub listingów | Rotacja: brak ID sesji | — |
| Paginacja, gdzie następna strona zależy od ciasteczka lub kursora | Jedna sesja rezydencjalna na listing | 10–30 min |
| Wyszukiwanie, potem wyniki, potem strony szczegółów | Jedna sesja rezydencjalna na wyszukiwanie | 10–20 min |
| Renderowanie bezgłowej przeglądarki kilku stron jednego serwisu | Jedna sesja rezydencjalna na kontekst przeglądarki | Czas życia kontekstu, do 30 min |
| Sprawdzanie, co strona pokazuje w różnych miastach | Jedna krótka sesja na sprawdzenie miasta | 5 min |
| Ponowne sprawdzanie tej samej strony co godzinę | Rotacja | — |

## Jak zarządzać pulą sesji rezydencjalnych w Pythonie?

Mała pula rozkłada obciążenie na kilka stabilnych wyjść i wycofuje każde po określonej liczbie żądań lub po sygnale awarii wyjścia, np. 502 lub 503. Uwaga na to, czego nie robi: nie zmienia IP, by obejść 403 lub 429. To oznacza, że strona chce, byś zwolnił, więc pula przekazuje ich do twojego kodu.

*Python: pula sesji rezydencjalnych*

```python
import random
import uuid

import requests

GATEWAY = "gw.crawlrelay.com:7777"
BASE_USER, PASSWORD = "USERNAME-country-us", "PASSWORD"


class SlowDown(Exception):
    """The target asked us to slow down (403 or 429): back off, do not rotate."""


class StickySession:
    def __init__(self, ttl=15, max_requests=50):
        self.id = uuid.uuid4().hex[:10]
        self.max_requests, self.used = max_requests, 0
        user = "%s-session-%s-ttl-%d" % (BASE_USER, self.id, ttl)
        proxy = "http://%s:%s@%s" % (user, PASSWORD, GATEWAY)
        self.http = requests.Session()
        self.http.proxies = {"http": proxy, "https": proxy}


class SessionPool:
    EXIT_PROBLEMS = {502, 503, 504}

    def __init__(self, size=5, **options):
        self.options = options
        self.sessions = [StickySession(**options) for _ in range(size)]

    def _replace(self, i):
        self.sessions[i].http.close()
        self.sessions[i] = StickySession(**self.options)

    def get(self, url, **kwargs):
        i = random.randrange(len(self.sessions))
        s = self.sessions[i]
        s.used += 1
        try:
            r = s.http.get(url, timeout=(10, 30), **kwargs)
        except requests.exceptions.RequestException:
            self._replace(i)  # dropped exit or timeout: start a fresh session
            raise
        if r.status_code in (403, 429):
            raise SlowDown("%s returned %d" % (url, r.status_code))
        if r.status_code in self.EXIT_PROBLEMS or s.used >= s.max_requests:
            self._replace(i)
        return r


pool = SessionPool(size=5, ttl=15, max_requests=50)
print(pool.get("https://api.ipify.org").text)
```

## Jak sprawdzić, czy zmieniło się IP w sesji rezydencjalnej?

Zapytaj. Wywołaj serwis echo IP, np. `https://api.ipify.org` przez tę samą sesję na początku i na każdym punkcie kontrolnym, porównaj odpowiedzi. Zmiana oznacza, że wyjście sesji się zmieniło: zacznij od ostatniego punktu kontrolnego lub otwórz nową sesję. Zaloguj to z ID sesji, aby rozróżnić zmiany IP od zachowania strony podczas debugowania.

## Jakie błędy sesji kosztują najwięcej?

- **Rotowanie przy każdym żądaniu wieloetapowego procesu.** Strona widzi, jak koszyk, kursor lub token wyszukiwania skacze po krajach i resetuje go.
- **Jedno ID sesji na każdego worker’a.** Sesja jest na jeden flow; daj każdemu workerowi i flow własne ID.
- **Sesje dużo dłuższe niż zadanie.** TTL 30 minut dla 2-minutowego flow zajmuje IP na darmo i utrudnia czytanie logów.
- **Traktowanie 429 jako problem IP.** Nowe IP nie zmienia zasad serwisu; trzeba zwolnić. Zobacz [429 Too Many Requests](https://crawlrelay.com/pl/docs/errors/429-too-many-requests/).
- **Zakładanie rotacji przy każdym żądaniu.** Keep-alive utrzymuje wyjście; sprawdź tabelę powyżej dla swojej biblioteki.

## Sesje i rotacja: pytania

### Jak długo trwa sesja rezydencjalna?

Sticky sessions utrzymują ten sam IP przez czas ustawiony (ttl, w minutach) do 30 minut. IP może się zmienić wcześniej, np. gdy urządzenie rezydencjalne jest offline. Wybierz TTL trochę dłuższy niż flow, który obsługuje, i sprawdzaj wyjście na punktach kontrolnych.

### Czy sesja rezydencjalna kosztuje więcej niż rotacja?

Nie. CrawlRelay liczy ruch za GB, a sesje, rotacja i targetowanie są w tej cenie. Sesja rezydencjalna może nawet oszczędzać ruch, bo jedno połączenie keep-alive unika nowego handshake TLS na każde żądanie.

### Czy rotacja przy każdym żądaniu jest lepsza do scrapingu?

Dla niezależnych stron rotacja rozkłada obciążenie i unika długiego korzystania z jednego IP na jednej stronie. Dla czegokolwiek ze stanem, jak paginacja z ciasteczkiem, psuje flow. Większość crawlów miesza oba: rotuje między elementami, a pozostaje rezydencjalna wewnątrz flow.

### Czy mogę wybrać dokładne IP?

Nie. Brama proxy rezydencjalnego przydziela wyjścia z puli, która ciągle się zmienia, w zależności od targetowania w twojej nazwie użytkownika. Wybierasz kraj, miasto, stan USA, kod pocztowy lub ASN i możesz utrzymać IP w sesji; nie możesz zarezerwować konkretnego adresu.

**Rotacja i sesje w każdym planie** 1,50 USD za 1 GB, 0,50 USD/GB od 50 GB. [Zobacz ceny](https://crawlrelay.com/pl/pricing/) · [Przewodnik po współbieżności](https://crawlrelay.com/pl/docs/concurrency/)

---

CrawlRelay: CrawlRelay to serwis proxy rezydencjalne i mobilne proxy 4G/5G z rotacją, stworzony dla programistów i potoków danych AI: ruch bez wygasania w modelu pay-as-you-go od 0,50 USD/GB, płatny w kryptowalutach, bez konieczności przesyłania dokumentów. Bez KYC — brak dowodu, selfie i dokumentów. Płać w kryptowalutach.
