# Sticky sessions dan rotasi IP: ID sesi, TTL, dan penggunaan ulang koneksi

> Cara kerja sticky sessions dan rotasi IP pada gateway proxy residensial: ID sesi, TTL, penggunaan ulang koneksi per pustaka, dan pool sesi.

- URL: https://crawlrelay.com/id/docs/sessions/
- Terakhir diperbarui: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Rotasi terjadi per koneksi, sticky session berdasarkan ID sesi. Setelah tahu bagaimana pustaka Anda menggunakan ulang koneksi, Anda bisa menentukan kapan IP benar-benar berubah.

**Jawaban cepat — Bagaimana sticky sessions dan rotasi IP bekerja pada proxy residensial?**

Di **CrawlRelay**, username tanpa ID sesi mendapatkan IP dari pool pada setiap koneksi TCP baru, biasanya berbeda, dan `-session-<id>-ttl-<minutes>` mempertahankan satu IP untuk ID itu selama hingga 30 menit, meskipun IP bisa berubah lebih awal. Rotasi mengikuti koneksi, bukan permintaan HTTP, jadi keep-alive menentukan kapan IP Anda sebenarnya berubah. Trafik residensial dikenai biaya US$0,50/GB mulai dari 50 GB. Dibayar dengan crypto, tanpa KYC.

## Aturan sesi secara singkat

| Atribut | Nilai |
| --- | --- |
| Unit rotasi | Satu IP dari pool per koneksi TCP baru, biasanya berbeda |
| Sticky session | `-session-<id>-ttl-<minutes>` ditambahkan ke username |
| Panjang sesi | hingga 30 menit |
| ID sesi | 1–32 huruf atau angka; satu ID per alur |
| Apa yang mengakhiri sesi lebih awal | Perangkat residensial di belakangnya offline |
| ID Bersama | Klien yang mengirim ID yang sama berbagi exit yang sama |
| Biaya | Gratis: sesi dan rotasi sudah termasuk dalam harga per-GB |

## Apa yang terjadi di gateway saat saya mengirimkan ID sesi?

Gateway membaca username pada setiap koneksi baru. Tanpa bagian sesi, gateway memilih exit proxy residensial yang sesuai dengan target Anda hanya untuk koneksi itu saja. Dengan bagian sesi, gateway mempertahankan exit yang sama untuk ID itu hingga TTL yang Anda tentukan.

IP lengket adalah koneksi rumah nyata, jadi bisa hilang sebelum TTL berakhir: perangkat dimatikan, kehilangan Wi-Fi, atau berganti jaringan. Alur panjang harus bisa bertahan dari hal ini dengan memeriksa IP exit pada titik pemeriksaan dan memulai ulang dari titik pemeriksaan tersebut, bukan gagal seluruh pekerjaan.

## Bagaimana setiap library menggunakan ulang koneksi?

Jika sebuah library menjaga koneksi tetap hidup, setiap permintaan pada koneksi itu menggunakan satu exit yang sama. Ini cara mendapatkan tiap perilaku dengan sengaja.

| Library | Default | IP baru per permintaan | Satu IP untuk satu alur |
| --- | --- | --- | --- |
| Python requests | `Session` menjaga koneksi tetap hidup | Header `Connection: close`, atau `Session` baru per permintaan | Satu `Session` dengan ID sesi di username |
| httpx | Klien mengelola kumpulan koneksi | `httpx.Limits(max_keepalive_connections=0)` | Satu klien per ID sesi |
| aiohttp | `TCPConnector` mengelola kumpulan koneksi | `TCPConnector(force_close=True)` | ID sesi di username URL proxy |
| Scrapy | Kumpulan berdasarkan kredensial proxy dan host | `meta={"proxy_session": "new"}` dengan [middleware](https://crawlrelay.com/id/docs/scrapy/) kami | `proxy_session` tetap untuk alur |
| Playwright / Puppeteer | Chrome mengelola kumpulan per konteks | Konteks baru per halaman | Satu konteks per ID sesi |
| Node.js undici, axios, got | Agent menjaga socket tetap hidup | Agent baru per permintaan, atau keep-alive mati | Satu agent per ID sesi |
| curl | Satu koneksi per perintah | Sudah seperti itu | ID sesi yang sama di setiap perintah |

## Strategi sesi mana cocok dengan pekerjaan scraping mana?

| Pekerjaan | Strategi | TTL yang disarankan |
| --- | --- | --- |
| Halaman produk, artikel, atau listing mandiri | Putar: tanpa ID sesi | — |
| Paginasi dengan halaman berikutnya bergantung pada cookie atau cursor | Satu sesi lengket per listing | 10–30 menit |
| Cari, lalu hasil, lalu halaman detail | Satu sesi lengket per pencarian | 10–20 menit |
| Peramban headless yang merender beberapa halaman dari satu situs | Satu sesi lengket per konteks peramban | Masa hidup konteks, hingga 30 menit |
| Memeriksa apa yang ditampilkan halaman di beberapa kota | Satu sesi pendek per pemeriksaan kota | 5 menit |
| Memeriksa ulang halaman yang sama setiap jam | Putar | — |

## Bagaimana cara mengelola pool sesi lengket dalam Python?

Pool kecil mendistribusikan beban ke beberapa exit yang stabil dan pensiun setiap satu setelah sejumlah permintaan tertentu atau setelah tanda exitnya gagal, seperti 502 atau 503. Catat apa yang **tidak** dilakukannya: tidak menukar IP untuk melewati 403 atau 429. Itu berarti situs ingin Anda lambat, jadi pool meneruskannya ke kode Anda.

*Python: pool sesi lengket*

```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)
```

## Bagaimana saya tahu IP lengket telah berubah?

Tanya. Minta layanan echo IP seperti `https://api.ipify.org` melalui sesi yang sama di awal alur dan di setiap checkpoint, lalu bandingkan jawabannya. Perubahan berarti exit di balik sesi berubah: mulai ulang alur dari checkpoint terakhir, atau buka sesi baru. Catat dengan ID sesi agar Anda bisa membedakan perubahan IP dari perilaku situs saat debugging.

## Kesalahan sesi mana yang paling merugikan?

- **Memutar pada setiap permintaan dalam alur multi-langkah.** Situs melihat keranjang, cursor atau token pencarian berpindah antar negara dan mengatur ulang.
- **Satu ID sesi untuk setiap pekerja.** Sesi dimaksudkan untuk satu alur; berikan setiap pekerja dan alurnya ID sendiri.
- **Sesi jauh lebih lama dari pekerjaan.** TTL 30 menit untuk alur 2 menit membuat IP sibuk tanpa alasan dan membuat log sulit dibaca.
- **Menganggap 429 sebagai masalah IP.** IP baru tidak mengubah aturan situs; memperlambatlah yang mengubahnya. Lihat [429 Too Many Requests](https://crawlrelay.com/id/docs/errors/429-too-many-requests/).
- **Mengira rotasi per permintaan.** Keep-alive mempertahankan exit; periksa tabel di atas untuk perpustakaan Anda.

## Sesi dan rotasi: pertanyaan

### Berapa lama sesi lengket bertahan?

Sticky sessions menjaga IP yang sama selama waktu yang Anda atur (ttl, dalam menit), hingga 30 menit. IP bisa berubah lebih awal, misal jika perangkat residensial offline. Pilih TTL sedikit lebih lama dari alur yang dilayani, dan periksa exit di checkpoint.

### Apakah sesi lengket lebih mahal daripada rotasi?

Tidak. CrawlRelay membebankan lalu lintas per GB, dan sesi, rotasi serta penargetan termasuk dalam harga itu. Sesi lengket malah dapat menghemat lalu lintas karena satu koneksi keep-alive menghindari handshake TLS baru untuk setiap permintaan.

### Apakah rotasi di setiap permintaan lebih baik untuk scraping?

Untuk halaman independen, rotasi mendistribusikan beban dan menghindari mengakses situs dari satu IP selama berjam-jam. Untuk apa pun yang memiliki status, seperti paginasi yang terkait dengan cookie, itu memecah alur. Sebagian besar crawl menggabungkan keduanya: putar antar item, tetap lengket dalam alur.

### Bisakah saya memilih IP persis yang saya dapatkan?

Tidak. Gateway proxy residensial menetapkan exit dari pool yang selalu berubah, menyesuaikan dengan penargetan pada username Anda. Anda memilih negara, kota, negara bagian AS, kode pos atau ASN, dan bisa mempertahankan IP dengan sesi; Anda tidak dapat memesan alamat spesifik.

**Rotasi dan sesi ada di setiap paket** US$1,50 untuk 1 GB, US$0,50/GB dari 50 GB. [Lihat harga](https://crawlrelay.com/id/pricing/) · [Panduan concurrency](https://crawlrelay.com/id/docs/concurrency/)

---

CrawlRelay: CrawlRelay adalah layanan proxy residensial dan proxy seluler 4G/5G yang berfokus pada pengembang untuk scraper dan pipeline data AI: trafik pay-as-you-go tanpa kedaluwarsa mulai dari US$0,50/GB, dibayar dengan crypto, tanpa perlu unggah ID. Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan crypto.
