PHP / دليل حلول تحريري
SQL المحضرة والنص الفاسد وحالة الجلسة المفقودة
ميّز فشل الربط والترميز وعمر الجلسة قبل إضعاف الحماية. استخدم SQLite مملوكة ودليل جلسة مصطنعاً لا تخزين التطبيق.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد ترفض العبارة المعاملات أو تفسد العربية أو يختفي تعديل الجلسة. تتشابه الأعراض وتختلف الطبقات: البنية والمشغل والترميز ونطاق الكوكي والمعالج والإخراج المبكر والكتابة بعد الإغلاق.
افهم الأسباب المحتملة
- تشمل الأخطاء ربط عمود كقيمة وعدد مواضع خاطئ واقتباس المربوط وافتراض أنواع واحدة وتحويل ترميز مخمن وتوقع حفظ اللاحق بعد الإغلاق. لا يثبت تخزين CLI تسليم كوكي المتصفح.
1. اختزال SQL لتكرار ربط قيم
افحص البنية الثابتة والمواضع والمفاتيح والمشغل. اربط القيم واحصر المعرف والاتجاه. اضبط الاستثناء بمعزل ولا تسجل الخاص. يفحص المثال ذهاب وعودة UTF-8 مع اقتباس في SQLite واحدة لا خادماً أو ترميز محرك آخر أو تزامناً. لا تستبدل التحضير بالوصل لإخفاء الخطأ.
<?php
declare(strict_types=1);
$db = new PDO("sqlite::memory:", null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
$db->exec("CREATE TABLE names (value TEXT NOT NULL)");
$write = $db->prepare("INSERT INTO names (value) VALUES (:value)");
$expected = "أمل's course";
$write->execute(["value" => $expected]);
$actual = $db->query("SELECT value FROM names")->fetchColumn();
echo $actual, PHP_EOL;
echo $actual === $expected ? "same bytes
" : "changed bytes
";
أمل's course
same bytes
تفحص الصرامة البايتات نفسها دون DSN أو اعتماد أو جدول تطبيق.
2. تحديد أول اختلاف ترميز
تتبع عربية مصطنعة عبر الفك والحفظ والاتصال والقراءة والترويسة والعرض. قارن البايتات لا التحويل المتكرر للتجميل. قد يصح التخزين ويخطئ charset العرض ولا يصلح إعلان UTF-8 فساداً قديماً. راجع ترميز محركك لا دليل SQLite، واحفظ الأصل خاصاً ولا تسجل أسماء حقيقية.
3. فصل نقل الكوكي من حفظ الخادم
افحص قدرة الرد على ضبط الكوكي وإرسال التالي للنطاق الصحيح وقراءة المعالج. راجع HTTPS وSecure والمضيف والمسار وSameSite والانتهاء والإخراج والمعالج. لا تكشف المعرف أو تضعف الصفات أو تستخدم حساباً حقيقياً. استخدم عميلاً مصطنعاً وتخزيناً مؤقتاً للعمر ثم افحص حد المتصفح منفصلاً.
4. إصلاح ملكية الكتابة والقفل
أكمل الجلسة قبل إغلاق الكتابة ولا تعتبر اللاحق دائماً. حرر القفل قبل العمل الطويل عند السماح ولا تفتح وتستبدل دون تزامن. افحص ثابت المعاملة بعد فشل لا استدعاء التراجع فقط. افصل الجلسة من الأعمال الدائمة. يفيد بقاء العداد محلياً وتبقى الكوكي والتوزيع والمصادقة والإذن تكاملاً منفصلاً.
تحقق من نجاح الإصلاح
افحص الاقتباس والعربية ورفض المعامل والتراجع بمصطنع على المشغل المقصود. افحص حفظ الجلسة ونطاق الكوكي منفصلين مع الإغلاق والانتهاء. وثّق الإصدار والمشغل والمعالج والترميز والحد ولا تدّعِ بيئة أخرى.
امنع تكرار المشكلة
- احصر البنية واربط القيم ومد UTF-8 للكل ووضح الجلسة. استخدم تشخيصاً خاصاً وتجهيزاً مملوكاً واختبارات منفصلة للقاعدة وHTTP والجلسة حتى لا يخفي المحلي افتراضاً غير مختبر.