الشروحات المعمقة

ملفات تعريف الارتباط والجلسات ومتطلباتها لحلّ reCAPTCHA

الإجابة المباشرة أولاً: عند الحل عبر API باستخدام CaptchaAI لا تحتاج إلى تمرير أي ملفات تعريف ارتباط، إذ يكفي sitekey وpageurl لإنشاء رمز صالح. تبقى ملفات تعريف الارتباط مهمة في حالتين فقط:

  • الأتمتة التي تدور داخل متصفح حقيقي وتراكم ثقة الجلسة بين عمليات التشغيل.
  • المواقع عالية الحساسية التي تطابق الجلسة قبل قبول الرمز.

يوضح هذا الدليل أي ملفات تعريف ارتباط يضبطها reCAPTCHA، وكيف ترفع الجلسة القائمة درجة الثقة وتقلّل احتمال ظهور التحدي، ومتى تحتاج فعلاً إلى الحفاظ على سلسلة ملفات تعريف الارتباط.


كيف تغيّر ملفات تعريف الارتباط درجة مخاطر reCAPTCHA

قبل الدخول في أسماء الملفات، من المفيد فهم لماذا تهمّ أصلاً. يبني reCAPTCHA درجة ثقة لكل زيارة، وملفات تعريف الارتباط هي أحد أهم مدخلاتها:

  • الجلسة التي تحمل سجلاً سابقاً تبدأ من خط أساس أعلى للثقة.
  • الجلسة الفارغة تُعامَل كزائر مجهول يحتاج تحليلاً سلوكياً أطول ليعوّض غياب التاريخ.

نصيحة عملية: لا تمسح ملفات تعريف الارتباط بين عمليات التشغيل إلا إذا كنت تختبر سيناريو الزائر الجديد عمداً.

جلسة جديدة (بلا ملفات تعريف ارتباط)

New browser session, all cookies cleared
    ↓
reCAPTCHA JavaScript loads
    ↓
No _GRECAPTCHA → First-time visitor signal
No SID/HSID → No Google account trust
No rc:: cookies → No behavioral history
    ↓
Starting risk score: lower baseline (0.3-0.5 for v3)
    ↓
Behavioral analysis must compensate for lack of history
    ↓
Result: More likely to receive visible challenge (v2)
         Lower score (v3)

جلسة عائدة (مع ملفات تعريف الارتباط)

Existing browser session with cookies
    ↓
reCAPTCHA JavaScript loads
    ↓
_GRECAPTCHA found → Returning visitor
SID/HSID found → Google account trust
rc:: cookies found → Previous behavioral data
    ↓
Starting risk score: higher baseline (0.5-0.7 for v3)
    ↓
Behavioral analysis reinforces cookie-based trust
    ↓
Result: More likely to auto-pass (v2)
         Higher score (v3)

مثال من الواقع: فريق في دبي يؤتمت اختبارات تسجيل الدخول لبوابة حجوزات، فيشغّل كل عملية داخل جلسة نظيفة تُمسح فيها ملفات تعريف الارتباط. النتيجة أن reCAPTCHA v2 يعامل كل محاولة كزائر جديد فيعرض تحدي الصور كل مرة تقريباً. وبمجرد الاحتفاظ بمخزن ملفات ثابت بين عمليات التشغيل، تبدأ الدرجة من خط أساس أعلى ويقلّ ظهور التحديات.


خريطة ملفات تعريف الارتباط التي يعتمدها reCAPTCHA

يوزّع reCAPTCHA ملفات تعريف الارتباط على ثلاث مجموعات:

  • ملفات خاصة به تحمل بيانات تحليل المخاطر.
  • ملفات مرتبطة بحساب Google تضيف ثقة إضافية.
  • ملفات طرف ثالث للموافقة والإعلانات.

ملفات تعريف الارتباط الخاصة بـ reCAPTCHA

ملف تعريف الارتباط المجال الغرض العمر الافتراضي
_GRECAPTCHA .google.com حالة reCAPTCHA المشتركة بين المواقع 6 أشهر
rc::a الموقع المستهدف بيانات تحليل المخاطر — بصمة اللوحة canvas وسلوك المؤشر الجلسة
rc::b الموقع المستهدف بيانات تحليل المخاطر — الإشارات السلوكية الجلسة
rc::c الموقع المستهدف بيانات تحليل المخاطر — التوقيت الجلسة
rc::d-15# الموقع المستهدف استمرار حالة التحدي الجلسة

أرقام الأثر على الدرجة أدناه تقديرية ومبنية على سلوك مرصود، وقد تتغيّر بحسب الموقع وسياسة Google.

ملفات تعريف الارتباط لحساب Google (تؤثر على الدرجة)

ملف تعريف الارتباط المجال الغرض الأثر على الدرجة
SID .google.com معرّف جلسة Google +0.1 إلى +0.3
HSID .google.com معرّف جلسة بخاصية HTTP-only جزء من ثقة الجلسة
SSID .google.com معرّف الجلسة الآمن جزء من ثقة الجلسة
NID .google.com تفضيلات وجلسة Google +0.05 إلى +0.1
1P_JAR .google.com تخصيص إعلانات Google إشارة ثقة طفيفة

ملفات تعريف الارتباط لجهات خارجية يستخدمها reCAPTCHA

ملف تعريف الارتباط المجال الغرض
CONSENT .google.com حالة الموافقة على ملفات تعريف الارتباط
AEC .google.com ملف إعلاني مشفّر
SOCS .google.com إعدادات الموافقة على ملفات تعريف الارتباط

إدارة ملفات تعريف الارتباط في الأتمتة

إذا كانت أتمتتك تعتمد على متصفح، فالحفاظ على ملفات تعريف الارتباط بين الطلبات هو ما يبني ثقة الجلسة تدريجياً. فيما يلي ثلاث طرق شائعة حسب أدواتك.

الطريقة 1: مخزن دائم لملفات تعريف الارتباط

احتفظ بملفات تعريف الارتباط عبر الطلبات لتراكم ثقة الجلسة:

import requests
import pickle
import os

class CookieManager:
    """Manage cookies for reCAPTCHA sessions."""

    def __init__(self, cookie_file="cookies.pkl"):
        self.cookie_file = cookie_file
        self.session = requests.Session()
        self.load_cookies()

    def load_cookies(self):
        """Load cookies from disk if they exist."""
        if os.path.exists(self.cookie_file):
            with open(self.cookie_file, "rb") as f:
                self.session.cookies = pickle.load(f)

    def save_cookies(self):
        """Save cookies to disk for next session."""
        with open(self.cookie_file, "wb") as f:
            pickle.dump(self.session.cookies, f)

    def visit_page(self, url):
        """Visit a page to collect cookies."""
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/120.0.0.0 Safari/537.36",
        }
        response = self.session.get(url, headers=headers, timeout=15)
        self.save_cookies()
        return response

    def get_recaptcha_cookies(self):
        """Get cookies relevant to reCAPTCHA."""
        relevant = {}
        for cookie in self.session.cookies:
            if cookie.name in ["_GRECAPTCHA", "SID", "HSID", "SSID", "NID"]:
                relevant[cookie.name] = {
                    "value": cookie.value[:20] + "...",
                    "domain": cookie.domain,
                    "expires": cookie.expires,
                }
            if cookie.name.startswith("rc::"):
                relevant[cookie.name] = {
                    "value": cookie.value[:20] + "...",
                    "domain": cookie.domain,
                }
        return relevant


# Usage
cm = CookieManager("recaptcha_session.pkl")
cm.visit_page("https://example.com/login")  # Build cookies
print(cm.get_recaptcha_cookies())

الطريقة 2: تمرير ملفات تعريف الارتباط في Selenium

from selenium import webdriver
import json

def setup_cookies(driver, cookie_file="selenium_cookies.json"):
    """Load and apply saved cookies to a Selenium session."""
    if not os.path.exists(cookie_file):
        return

    with open(cookie_file, "r") as f:
        cookies = json.load(f)

    for cookie in cookies:
        # Selenium requires the domain to match current page
        try:
            driver.add_cookie(cookie)
        except Exception:
            pass  # Skip cookies for different domains

def save_cookies(driver, cookie_file="selenium_cookies.json"):
    """Save current cookies for future sessions."""
    cookies = driver.get_cookies()
    with open(cookie_file, "w") as f:
        json.dump(cookies, f)

# Usage
driver = webdriver.Chrome()
driver.get("https://example.com")
setup_cookies(driver)  # Apply saved cookies
driver.refresh()       # Reload with cookies

# After CAPTCHA solving...
save_cookies(driver)   # Save for next run

الطريقة 3: تمرير ملفات تعريف الارتباط في Puppeteer

const puppeteer = require("puppeteer");
const fs = require("fs");

async function manageCookies(page, cookieFile = "cookies.json") {
    // Load cookies if file exists
    if (fs.existsSync(cookieFile)) {
        const cookies = JSON.parse(fs.readFileSync(cookieFile));
        await page.setCookie(...cookies);
    }

    // Save cookies after page interaction
    const saveCookies = async () => {
        const cookies = await page.cookies();
        fs.writeFileSync(cookieFile, JSON.stringify(cookies, null, 2));
    };

    return { saveCookies };
}

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();

    const { saveCookies } = await manageCookies(page);

    await page.goto("https://example.com/login");

    // ... solve CAPTCHA ...

    await saveCookies();
    await browser.close();
})();

ملفات تعريف الارتباط والحل عبر API مع CaptchaAI

عند الحل عبر API، ينشئ CaptchaAI الرمز داخل بيئته الخاصة، ويتحقق الموقع المستهدف من صحة الرمز دون الاطلاع على ملفات تعريف الارتباط في متصفحك. ومع ذلك، تضيف بعض التطبيقات تحققاً إضافياً على مستوى الجلسة.

الحل القياسي (معظم المواقع)

لا حاجة لتمرير ملفات تعريف الارتباط. يكفي هذا المسار في الحالات الشائعة:

  • لا يربط الموقع الرمز بجلسة المتصفح.
  • تُرسل النموذج مباشرة عبر طلب HTTP.
  • لا تظهر رسالة فشل في التحقق من الجلسة.

عندها يكفي sitekey وpageurl ليولّد CaptchaAI رمزاً صالحاً:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Standard solve — no cookies needed
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com/login",
    "json": 1,
})

التطبيقات المرتبطة بملفات تعريف الارتباط

تتحقق بعض المواقع عالية الأمان من أن الجلسة التي ترسل الرمز هي نفسها التي حمّلت أداة reCAPTCHA. في هذه الحالة اتبع التسلسل التالي:

  1. حمّل الصفحة في متصفح حقيقي لإنشاء ملفات تعريف الارتباط
  2. استخرج مفتاح الموقع من الصفحة المحمّلة
  3. أرسل الطلب إلى CaptchaAI بمفتاح الموقع وعنوان الصفحة
  4. احقن الرمز المُعاد في جلسة المتصفح نفسها
  5. أرسل النموذج من المتصفح مع الحفاظ على سلسلة ملفات تعريف الارتباط
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

API_KEY = "YOUR_API_KEY"

# Step 1: Load page in real browser (establishes cookies)
driver = webdriver.Chrome()
driver.get("https://secure-site.com/login")

# Step 2: Extract sitekey
widget = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]")
sitekey = widget.get_attribute("data-sitekey")

# Step 3: Solve via CaptchaAI
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": driver.current_url,
    "json": 1,
})
task_id = submit.json()["request"]

for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result.get("status") == 1:
        token = result["request"]
        break

# Step 4: Inject token into browser session (same cookies)
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)

# Step 5: Submit form from same browser session
driver.find_element(By.CSS_SELECTOR, "form").submit()

القاعدة العملية: إذا نجح المسار القياسي لديك فلا داعي لتعقيد الأمر؛ ولا تنتقل إلى مسار المتصفح إلا حين ترى رسالة صريحة بفشل التحقق من الجلسة أو الرمز.


أثر إيقاف ملفات تعريف الارتباط للجهات الخارجية في Chrome

يمضي Chrome في التخلص التدريجي من ملفات تعريف الارتباط للجهات الخارجية، وهذا يمسّ reCAPTCHA لأن _GRECAPTCHA يُضبط على .google.com ويُقرأ من سياق طرف ثالث.

استجابة Google

  • يعتمد reCAPTCHA v3 وEnterprise على تنفيذ JavaScript من الطرف الأول
  • تنتقل ملفات تعريف الارتباط إلى تخزين Partitioned عبر آلية CHIPS
  • ملفات rc:: هي أصلاً ملفات طرف أول مضبوطة على مجال الموقع المستهدف

الأثر على الأتمتة

  • محدود جداً؛ فالحل عبر API غير متأثر لأن CaptchaAI يولّد الرموز من جانب الخادم
  • قد تشهد الأتمتة القائمة على المتصفح تغيّرات طفيفة في الدرجة مع تعديل Google لسياسة ملفات تعريف الارتباط

حل المشكلات الشائعة

غالباً ما يعود سبب الأعراض التالية إلى إدارة الجلسة لا إلى مفتاح الموقع.

المشكلة السبب الحل
reCAPTCHA v2 يعرض تحدي الصور دائماً لا توجد ملفات جلسة وثقة منخفضة ثبّت ملفات تعريف الارتباط عبر الطلبات
درجة reCAPTCHA v3 أقل من 0.3 باستمرار جلسة جديدة في كل مرة حافظ على مخزن ملفات تعريف الارتباط
الرمز يعمل مرة ثم يفشل عند إعادة المحاولة عدم تطابق جلسة ملف تعريف الارتباط استخدم الجلسة نفسها لتحميل الصفحة والإرسال
«فشل التحقق من ملف تعريف الارتباط/الجلسة» الموقع يفحص سلسلة ملفات تعريف الارتباط استخدم حقن الرمز من داخل المتصفح
أداة reCAPTCHA لا تُحمَّل حظر ملفات تعريف الارتباط للجهات الخارجية اسمح بملفات google.com

الأسئلة المتداولة

كيف أعرف أن الموقع يتطلب مسار المتصفح بدل الحل القياسي؟

جرّب المسار القياسي أولاً. إذا قُبِل الرمز وأتمّ النموذج فالموقع لا يربط الرمز بالجلسة. أما إذا رفض الموقع رمزاً صالحاً أو أظهر رسالة فشل في التحقق من الجلسة رغم صحة sitekey وpageurl، فذلك مؤشر على أنه يطابق سلسلة ملفات تعريف الارتباط ويحتاج مسار المتصفح.

هل يؤثر البروكسي السكني أو تغيّر عنوان IP على درجة الجلسة؟

نعم، جزئياً. سمعة عنوان IP إشارة مستقلة عن ملفات تعريف الارتباط، لكنها تتفاعل معها: عنوان بسمعة ضعيفة قد يخفض الدرجة حتى مع وجود جلسة موثوقة، بينما لا يعوّض عنوان نظيف غياب سجل الجلسة تماماً. للأتمتة المستقرة، ثبّت العنوان والجلسة معاً بدل تغييرهما في كل تشغيل.

هل يتساوى اعتماد reCAPTCHA v2 وv3 على ملفات تعريف الارتباط؟

لا تماماً. كلاهما يستفيد من سجل الجلسة، لكن الأثر يظهر بشكل مختلف:

  • في v2 يحدد سجل الجلسة ظهور تحدي الصور من عدمه.
  • في v3 ينعكس السجل على الدرجة الرقمية التي يقرأها موقعك.
  • في الحالتين يبقى الحل عبر API مستقلاً عن ملفات متصفحك.

لماذا تزيد نوافذ التصفح الخفي من ظهور التحديات؟

لأن التصفح الخفي يبدأ بلا _GRECAPTCHA وبلا ملفات rc:: التي تحمل سجل السلوك السابق. يعاملك reCAPTCHA كزائر جديد بلا تاريخ، فينطلق من خط أساس أدنى للثقة ويميل لعرض تحدٍّ مرئي أكثر.

كيف أُبقي ملفات تعريف الارتباط صالحة في مهام الأتمتة طويلة الأمد؟

احفظ الملفات على القرص وأعد تحميلها بين عمليات التشغيل، ثم حدّثها دورياً بزيارة الموقع المستهدف. تذكّر أن _GRECAPTCHA يدوم نحو 6 أشهر، بينما تنتهي ملفات جلسة rc:: بإغلاق المتصفح، وملفات حساب Google مثل SID وHSID قد تُبطلها Google في أي وقت.


الخلاصة

يستعمل reCAPTCHA ملفات تعريف الارتباط لتتبّع الجلسة عبر ملفات rc::، وللثقة المشتركة بين المواقع عبر _GRECAPTCHA، ولربط حساب Google عبر SID وHSID. الجلسات الجديدة الخالية من الملفات تنتج درجات أدنى وتحديات أصعب. أما الحل عبر API مع CaptchaAI فلا يتطلب ملفات تعريف ارتباط إطلاقاً، إذ يكفي مفتاح الموقع وعنوان الصفحة لتوليد رمز صالح. وللتطبيقات المرتبطة بالجلسة، اعتمد مسار المتصفح: حمّل الصفحة لإنشاء الملفات، ثم احلّ عبر CaptchaAI، واحقن الرمز، وأرسل من الجلسة نفسها.

مقالات ذات صلة

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.