كيفية إصلاح INVALID_SESSION_ID في عمليات نشر Salesforce

انتهت صلاحية معرّف الجلسة المستخدم لمصادقة استدعاء API، أو تم إلغاؤه، أو لم يكن صالحًا من الأساس.

يظهر أثناء: أي استدعاء API، غالبًا في منتصف عملية نشر أو مهمة اختبار طويلة

المعنى

يعني INVALID_SESSION_ID أن رمز الوصول الذي يوثّق استدعاء API أو Metadata API لم يعد صالحًا، سواء لأنه انتهت صلاحيته، أو تم إلغاؤه، أو لم يكن جلسة حقيقية من الأساس. يرفض Salesforce الاستدعاء فورًا قبل محاولة تنفيذ عملية النشر أو البيانات المطلوبة، لأن المصادقة تُفحص أولًا.

على عكس INVALID_LOGIN الذي يمنع أول محاولة مصادقة، يظهر هذا الخطأ في منتصف المهمة: نجحت خط الأنابيب في المصادقة، وبدأت العمل، ثم توقفت الجلسة في مكان ما في منتصف عملية نشر أو تشغيل اختبار أو مهمة Bulk API طويلة.

التشخيص

الأسباب الشائعة

مهمة طويلة الأمد تتجاوز مدة انتهاء الجلسة
تستغرق عملية نشر أو تشغيل اختبار Apex وقتًا أطول من مهلة الجلسة المضبوطة في المؤسسة، فتنتهي صلاحية الجلسة في منتصف المهمة.
تم إلغاء رمز تطبيق متصل أو أُجبر على إعادة المصادقة
يؤدي تغيير في سياسة OAuth أو إلغاء يدوي إلى إبطال الرمز في منتصف تشغيل خط الأنابيب.
أعادت مهمة CI استخدام جلسة مخبأة من تشغيل سابق
تعيد خطوة في خط الأنابيب استخدام معرّف جلسة محفوظ من مهمة سابقة بدلًا من المصادقة من جديد، وقد انتهت صلاحية تلك الجلسة منذ ذلك الحين.

الحل

  1. أعد المصادقة من جديد مباشرة قبل المهام الطويلة
    أعد المصادقة أو جدّد الرمز مباشرة قبل بدء عملية نشر أو تشغيل اختبار، بدلًا من إعادة استخدام جلسة أقدم.
  2. مدّد إعدادات مهلة الجلسة حيثما كان ذلك مبررًا
    زد مهلة الجلسة في Setup للمؤسسات التي تستغرق فيها عمليات تشغيل CI فعليًا وقتًا أطول من النافذة الافتراضية.
  3. تجنّب تخبئة معرّفات الجلسات بين تشغيلات خط الأنابيب
    أعد المصادقة لكل مهمة بدلًا من الاحتفاظ بمعرّف جلسة وإعادة استخدامه بين تنفيذات منفصلة لخط الأنابيب.
من واقع الاستخدام

إزاي Serpent بتمنع ده

يدير Serpent الاتصالات الموثّقة بكل مؤسسة مركزيًا ويجدّدها تلقائيًا، بحيث لا تتوقف عملية نشر أو مهمة اختبار طويلة في منتصفها بسبب انتهاء صلاحية جلسة مخبأة تحتها. راجع مكتبة أخطاء نشر Salesforce.

إعدادات ربط الـ org وGit في Serpent

الوقاية

استخدم تدفقًا قائمًا على رمز التجديد لأي عملية تستغرق أكثر من بضع دقائق
فضّل تدفقات OAuth التي تدعم تجديد الرمز الصامت على معرّف جلسة ثابت للمهام التي لديها احتمال حقيقي للاستمرار طويلًا.
قسّم مهام النشر أو الاختبار الطويلة جدًا إلى أجزاء أصغر
قسّم مهمة تقترب بانتظام من مهلة الجلسة إلى تشغيلات متسلسلة أصغر، تُجري كل واحدة منها مصادقة جديدة.
لا تحتفظ أبدًا بمعرّف جلسة كسرّ CI طويل الأمد
تعامل مع معرّف الجلسة على أنه للاستخدام مرة واحدة وقصير الأمد؛ واحتفظ بدلًا من ذلك برمز التجديد أو بيانات اعتماد JWT كسرّ دائم.
أسئلة شائعة

INVALID_SESSION_ID، تمت الإجابة

هل INVALID_SESSION_ID هو نفسه انتهاء صلاحية كلمة المرور؟
لا. يتعلق الأمر تحديدًا برمز الجلسة المستخدم لمصادقة API، وليس ببيانات اعتماد تسجيل دخول المستخدم، التي تبقى صالحة بغض النظر عن أي جلسة بعينها.
هل تسجيل الدخول مجددًا في تبويب متصفح آخر يبطل جلسة CI الخاصة بي؟
قد يحدث ذلك، حسب سياسات المؤسسة الخاصة بـ "Lock sessions to the IP address" والجلسات المتزامنة؛ يمكن إبطال جلسة مرتبطة بشكل صارم بسياق تسجيل دخول واحد بواسطة تسجيل دخول ثانٍ متعارض.
هل يتجنب نمط النشر غير المتزامن في Metadata API هذا الخطأ؟
جزئيًا. بدء عملية نشر غير متزامنة واستطلاع الحالة بجلسة جديدة في كل استطلاع يقلل من التعرض، لكن الجلسة الأصلية المستخدمة لبدء النشر يمكن أن تنتهي صلاحيتها إذا استغرق النشر نفسه وقتًا أطول من المهلة.

ابدأ مجانًا. بلا بطاقة ائتمان، بلا تثبيت، بلا التزام.

الإعداد في أقل من 15 دقيقة. لا حاجة لتوظيف DevOps.

هل تريد معرفة كيف يمكنكم الشحن أسرع قبل البدء؟ لنتحدث

بدون التزام.