php - وبيانات - حذف ملف التعريف




أي طريقة للحفاظ على ملفات تعريف الارتباط في الذاكرة وليس على القرص (4)

أنا أفعل بعض عمل cURL في php 5.3.0.

أتساءل عما إذا كان هناك أي طريقة لإخبار مقبض / كائن curl بالاحتفاظ بملفات تعريف الارتباط في الذاكرة (على افتراض أنني أعيد استخدام المقبض نفسه لطلبات متعددة) ، أو أعيدها بطريقة أو بأخرى ودعني أعيدها عند إجراء مقبض جديد.

هناك هذه الطريقة المقبولة منذ وقت طويل للحصول عليها في / خارج الطلب:

curl_setopt($ch, CURLOPT_COOKIEJAR, $filename); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $filename);

ولكنني أضرب بعض السيناريوهات حيث أحتاج إلى تشغيل نسخ متعددة من نص برمجي من نفس الدليل ، وهم يتقدمون على ملفات تعريف ارتباط بعضهم البعض. نعم ، أعلم أنه يمكنني استخدام tempnam () والتأكد من أن كل تشغيل له ملف تعريف الارتباط الخاص به ، ولكن هذا يقودني إلى الإصدار الثاني.

هناك أيضًا مشكلة وجود ملفات تعريف الارتباط هذه على القرص على الإطلاق. القرص I / O بطيء وزجاجة عنق أنا متأكد. لا أريد أن أتعامل مع تنظيف ملف تعريف الارتباط عند انتهاء النص البرمجي (حتى إذا خرجت بطريقة تسمح لي بتنظيفه).

أيه أفكار؟ أم أن هذه هي الطريقة فقط؟


إذا كنت تستخدم نظام التشغيل Linux ، فيمكنك تعيين هذه النقاط في مكان ما داخل / dev / shm .. وهذا سيحفظها في الذاكرة ويمكنك التأكد من أنها لن تستمر عبر إعادة التشغيل.

اعتقدت بطريقة ما أن تنظيف كيرل تعامل مع إلغاء ربط ملفات تعريف الارتباط ، ولكن يمكن أن أكون مخطئا.


لسوء الحظ ، لا أعتقد أنه يمكنك استخدام 'php: // memory' كدفق الإدخال والإخراج. الحل هو تحليل رؤوس نفسك. ويمكن القيام بذلك بسهولة. في ما يلي مثال على صفحة تقدم طلبين وتمرير ملفات تعريف الارتباط بنفسك.

curl.php:

<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.php?message=Hello!');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$data = curl_exec($curl);
curl_close($curl);

preg_match_all('|Set-Cookie: (.*);|U', $data, $matches);   
$cookies = implode('; ', $matches[1]);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.php');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_HEADER, true);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_COOKIE, $cookies);

$data = curl_exec($curl);
echo $data;

?>

test.php:

<?php
session_start();
if(isset($_SESSION['message'])) {
    echo $_SESSION['message'];
} else {
    echo 'No message in session';
}

if(isset($_GET['message'])) {
    $_SESSION['message'] = $_GET['message'];
}
?>

هذا سوف يخرج "مرحبا!" على الطلب الثاني.



ولكن هناك غير بديهي تمامًا.

curl_setopt($curl, CURLOPT_COOKIEFILE, "");

لمزيد من التفاصيل يرجى الاطلاع على إجابتي في التعليقات