# Sticky sessions และการหมุน IP: รหัสเซสชัน, TTL และการใช้งานการเชื่อมต่อซ้ำ

> วิธีการทำงานของ sticky sessions และการหมุน IP บนพร็อกซีเรซิเดนเชียลเกตเวย์: รหัสเซสชัน, TTL, การใช้งานการเชื่อมต่อซ้ำตามไลบรารี และพูลของเซสชัน

- URL: https://crawlrelay.com/th/docs/sessions/
- อัปเดตล่าสุด: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

การหมุนเกิดขึ้นตามการเชื่อมต่อแต่ละครั้ง ส่วน sticky sessions จะตามรหัสเซสชัน เมื่อคุณเข้าใจว่าไลบรารีของคุณใช้งานการเชื่อมต่อซ้ำอย่างไร คุณจะตัดสินใจได้อย่างชัดเจนว่าเมื่อใด IP จะเปลี่ยนแปลง

**คำตอบด่วน — การทำงานของ sticky sessions และการหมุน IP บนพร็อกซีเรซิเดนเชียลเป็นอย่างไร?**

บน **CrawlRelay** ชื่อผู้ใช้ที่ไม่มีรหัสเซสชันจะได้รับ IP จากพูลทุกการเชื่อมต่อ TCP ใหม่ โดยปกติจะเป็น IP ที่ต่างกัน และ `-session-<id>-ttl-<minutes>` จะรักษา IP หนึ่งสำหรับรหัสนั้นเป็นเวลา นานสูงสุด 30 นาที แม้ว่า IP อาจเปลี่ยนแปลงก่อนหน้านั้น การหมุนจะตามการเชื่อมต่อ ไม่ใช่คำขอ HTTP ดังนั้น keep-alive จะเป็นตัวกำหนดว่า IP ของคุณจะเปลี่ยนจริง ๆ เมื่อไหร่ ทราฟฟิกพร็อกซีเรซิเดนเชียลมีค่าใช้จ่ายเริ่มต้น US$0.50/GB จาก 50 GB ชำระเงินด้วยคริปโต, ไม่ต้อง KYC

## กฎของเซสชันสรุปแบบคร่าว ๆ

| คุณลักษณะ | ค่า |
| --- | --- |
| หน่วยของการหมุน | IP จากพูลในทุกการเชื่อมต่อ TCP ใหม่ โดยปกติจะเป็น IP ที่ต่างกัน |
| Sticky session | `-session-<id>-ttl-<minutes>` ต่อท้ายชื่อผู้ใช้ |
| ความยาวของเซสชัน | นานสูงสุด 30 นาที |
| รหัสเซสชัน | 1–32 ตัวอักษรหรือตัวเลข; รหัสหนึ่งต่อการไหลของข้อมูล |
| เงื่อนไขที่ทำให้เซสชันจบก่อนเวลา | อุปกรณ์พร็อกซีเรซิเดนเชียลเบื้องหลังนั้นออฟไลน์ |
| Shared IDs | ลูกค้าที่ส่ง ID เดียวกันจะใช้พร็อกซีเรซิเดนเชียล exit เดียวกัน |
| ค่าใช้จ่าย | ไม่มี: session และการเปลี่ยนพร็อกซีรวมในราคาต่อ GB แล้ว |

## เมื่อส่ง session ID ที่เกตเวย์จะเกิดอะไรขึ้น?

เกตเวย์จะอ่านชื่อผู้ใช้ในแต่ละการเชื่อมต่อใหม่ หากไม่มีส่วน session จะเลือกพร็อกซีเรซิเดนเชียลที่ตรงกับเป้าหมายของคุณสำหรับการเชื่อมต่อนั้นเท่านั้น หากมีส่วน session จะคงพร็อกซี exit เดิมสำหรับ ID นั้นตาม TTL ที่คุณตั้งไว้

พร็อกซี IP ติดหนึบคือการเชื่อมต่อจริงที่บ้าน จึงอาจตัดก่อนหมด TTL ได้ เช่น อุปกรณ์ปิด Wi-Fi หลุดหรือเปลี่ยนเครือข่าย งานที่ต่อเนื่องนานต้องจัดการโดยตรวจสอบ IP exit ที่จุดเช็กพอยต์และเริ่มใหม่จากจุดเช็กพอยต์แทนที่จะล้มทั้งงาน

## ไลบรารีแต่ละตัวใช้การเชื่อมต่อซ้ำกันอย่างไร?

ถ้าไลบรารีเก็บการเชื่อมต่อนั้นไว้ ทุกคำขอในเชื่อมต่อนั้นจะใช้พร็อกซี exit เดียวกัน นี่คือวิธีที่ทำให้ได้พฤติกรรมที่ต้องการอย่างตั้งใจ

| ไลบรารี | ค่าเริ่มต้น | IP ใหม่ทุกคำขอ | IP หนึ่งตัวสำหรับแต่ละ flow |
| --- | --- | --- | --- |
| Python requests | `Session` เก็บการเชื่อมต่อต่อเนื่อง | Header `Connection: close` หรือ `Session` ใหม่ในแต่ละคำขอ | `Session` ตัวเดียวกับ session ID ในชื่อผู้ใช้ |
| httpx | ไคลเอนต์รวมการเชื่อมต่อ | `httpx.Limits(max_keepalive_connections=0)` | ไคลเอนต์หนึ่งตัวต่อ session ID |
| aiohttp | `TCPConnector` รวมการเชื่อมต่อ | `TCPConnector(force_close=True)` | session ID ใน proxy URL username |
| Scrapy | รวมตามข้อมูลรับรองพร็อกซีและโฮสต์ | `meta={"proxy_session": "new"}` กับ [middleware](https://crawlrelay.com/th/docs/scrapy/) ของเรา | `proxy_session` ตายตัวสำหรับ flow |
| Playwright / Puppeteer | Chrome รวมต่อ context | context ใหม่ต่อหน้า | context หนึ่งตัวต่อ session ID |
| Node.js undici, axios, got | Agents เก็บ sockets ตลอด | Agent ใหม่ต่อคำขอ หรือปิด keep-alive | Agent หนึ่งตัวต่อ session ID |
| curl | หนึ่งการเชื่อมต่อต่อคำสั่ง | เป็นอย่างนี้อยู่แล้ว | session ID เดียวกันในแต่ละคำสั่ง |

## กลยุทธ์ session แบบไหนเหมาะกับงาน scraping อะไร?

| งาน | กลยุทธ์ | TTL แนะนำ |
| --- | --- | --- |
| หน้าผลิตภัณฑ์ บทความ หรือรายการแยก | หมุน: ไม่มี session ID | — |
| การแบ่งหน้าโดยที่หน้าถัดไปขึ้นกับคุกกี้หรือเคอร์เซอร์ | พร็อกซีเรซิเดนเชียลแบบติดหนึบหนึ่งครั้งต่อรายการ | 10–30 นาที |
| ค้นหา, แล้วผลลัพธ์, แล้วหน้ารายละเอียด | พร็อกซีเรซิเดนเชียลแบบติดหนึบหนึ่งครั้งต่อการค้นหา | 10–20 นาที |
| การเรนเดอร์เว็บด้วยเฮดเลสบราวเซอร์หลายหน้าในไซต์เดียวกัน | พร็อกซีเรซิเดนเชียลแบบติดหนึบหนึ่งครั้งต่อคอนเท็กซ์ของบราวเซอร์ | อายุของคอนเท็กซ์, สูงสุด 30 นาที |
| ตรวจสอบสิ่งที่หน้าแสดงในหลายเมือง | พร็อกซีเรซิเดนเชียลระยะสั้นหนึ่งครั้งต่อการตรวจสอบเมือง | 5 นาที |
| ตรวจสอบหน้าเดิมซ้ำทุกชั่วโมง | หมุน | — |

## ฉันจะจัดการพูลพร็อกซีเรซิเดนเชียลแบบติดหนึบใน Python อย่างไร?

พูลขนาดเล็กจะกระจายโหลดไปยังพร็อกซีเรซิเดนเชียลที่เสถียรไม่กี่อัน และเกษียณแต่ละอันหลังจากจำนวนคำขอที่กำหนดหรือหลังมีสัญญาณว่าการเชื่อมต่อล้มเหลว เช่น 502 หรือ 503 โปรดทราบว่ามันไม่ได้ทำสิ่งนี้: ไม่ได้สลับ IP เพื่อผ่าน 403 หรือ 429 เหล่านี้แปลว่าเว็บไซต์ต้องการให้คุณช้าลง ดังนั้นพูลจะส่งข้อความนั้นกลับไปยังโค้ดของคุณ

*Python: พูลพร็อกซีเรซิเดนเชียลแบบติดหนึบ*

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

## ฉันจะรู้ได้อย่างไรว่าพร็อกซีที่ติดหนึบเปลี่ยนหรือไม่?

ถาม การขอบริการสะท้อน IP เช่น `https://api.ipify.org` ผ่านเซสชันเดียวกันในจุดเริ่มต้นของกระบวนการและทุกจุดตรวจสอบแล้วเปรียบเทียบคำตอบ การเปลี่ยนแปลว่าพร็อกซีที่อยู่ข้างหลังเซสชันเปลี่ยนไป: เริ่มต้นใหม่จากจุดตรวจสอบล่าสุด หรือเปิดเซสชันใหม่ บันทึกไว้พร้อม session ID เพื่อแยกความแตกต่างระหว่างการเปลี่ยน IP กับพฤติกรรมเว็บไซต์ตอนดีบัก

## ข้อผิดพลาดของเซสชันแบบไหนที่มีค่าใช้จ่ายมากที่สุด?

- **หมุนทุกคำขอของกระบวนการหลายขั้นตอน.** เว็บไซต์จะเห็นตะกร้า, เคอร์เซอร์ หรือโทเคนการค้นหากระโดดไปมาระหว่างประเทศและรีเซ็ตมัน
- **เซสชัน ID หนึ่งอันสำหรับทุกคนทำงาน.** เซสชันถูกออกแบบให้สำหรับกระบวนการหนึ่งชุด จึงต้องให้แต่ละคนและแต่ละกระบวนการมี ID เอง
- **เซสชันยาวเกินกว่างาน.** TTL 30 นาทีสำหรับกระบวนการ 2 นาทีทำให้ IP ถูกใช้โดยเปล่าประโยชน์และทำให้บันทึกลำบากขึ้น
- **มอง 429 เป็นปัญหา IP.** IP ใหม่ไม่ได้เปลี่ยนกฎของเว็บไซต์; ต้องชะลอแทน ดู [429 Too Many Requests](https://crawlrelay.com/th/docs/errors/429-too-many-requests/).
- **สมมติว่าหมุนเปลี่ยนทุกคำขอ.** keep-alive ช่วยรักษาการเชื่อมต่อไว้; ดูตารางข้างบนสำหรับไลบรารีของคุณ

## เซสชันและการหมุน: คำถาม

### เซสชันติดหนึบจะอยู่นานแค่ไหน?

เซสชันติดตามเก็บ IP เดิมตามเวลาที่ตั้งไว้ (ttl เป็นนาที) สูงสุด 30 นาที IP อาจเปลี่ยนก่อนเวลากำหนด เช่น เมื่ออุปกรณ์พร็อกซีเรซิเดนเชียลออฟไลน์. เลือก TTL ให้ยาวกว่ากระบวนการที่ให้บริการเล็กน้อยและตรวจสอบพร็อกซีที่จุดตรวจสอบ

### เซสชันติดหนึบจะมีค่าใช้จ่ายมากกว่าการหมุนไหม?

ไม่ใช่. CrawlRelay คิดเงินตามปริมาณข้อมูลต่อ GB รวมถึงเซสชัน, การหมุน และการกำหนดเป้าหมาย พร็อกซีเรซิเดนเชียลแบบติดหนึบยังช่วยประหยัดปริมาณข้อมูล เพราะการเชื่อมต่อแบบเก็บไว้ช่วยหลีกเลี่ยงการจับมือ TLS ใหม่ทุกคำขอ

### หมุนทุกคำขอดีกว่าสำหรับการสแครปข้อมูลไหม?

สำหรับหน้าเว็บแยกกัน การหมุนช่วยกระจายโหลดและหลีกเลี่ยงการเข้าใช้ไซต์จาก IP เดียวเป็นเวลานาน สำหรับอะไรที่มีสถานะ เช่น การแบ่งหน้าที่ผูกกับคุกกี้ มันจะทำให้กระบวนการล่ม ส่วนใหญ่จะผสมทั้งสองอย่าง: หมุนระหว่างหมวดหมู่ อยู่ติดหนึบภายในกระบวนการ

### ฉันจะเลือก IP ที่แน่นอนได้ไหม?

ไม่ได้ พร็อกซีเรซิเดนเชียลจะกำหนดพร็อกซีจากพูลที่เปลี่ยนตลอดเวลา ตามเป้าหมายในชื่อผู้ใช้ คุณเลือกประเทศ, เมือง, รัฐในสหรัฐ, รหัสไปรษณีย์ หรือ ASN และสามารถเก็บ IP ไว้กับเซสชันได้ แต่ไม่สามารถจองที่อยู่เฉพาะได้

**การหมุนและเซสชันมีในทุกแผน** US$1.50 สำหรับ 1 GB, US$0.50/GB ตั้งแต่ 50 GB [ดูราคา](https://crawlrelay.com/th/pricing/) · [คู่มือจำนวนคำขอพร้อมกัน](https://crawlrelay.com/th/docs/concurrency/)

---

CrawlRelay: CrawlRelay คือพร็อกซีเรซิเดนเชียลหมุนเวียนพร้อมพร็อกซีมือถือ 4G/5G สำหรับนักพัฒนา เหมาะกับสแครปเปอร์และระบบจัดการข้อมูล AI: เติมเงินจ่ายตามการใช้งานจาก US$0.50/GB จ่ายด้วยคริปโต ไม่ต้องอัปโหลดบัตรประชาชน ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องถ่ายเซลฟี่ ไม่ต้องใช้เอกสาร จ่ายด้วยคริปโต
