လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကျွန်ုပ်၏မျှဝေထားသော cookies များအဘယ်ကြောင့်အလုပ်မဟုတ်သနည်း။

ကျွန်ုပ်၏မျှဝေထားသော cookies များအဘယ်ကြောင့်အလုပ်မဟုတ်သနည်း။

M66 2025-05-22

PHP သည် HTTP တောင်းဆိုမှုများကိုပြုလုပ်ရန် ဆံပင်ကောက်ကောက်ကို အသုံးပြုသောအခါတစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည် cookies များ, dns cache များသို့မဟုတ် SSL sessions များကဲ့သို့သောတောင်းဆိုမှုများအကြားအချို့သောအချက်အလက်များကိုမျှဝေလိုပါသည်။ ဤအချိန်တွင်သင်သည်ခွဲဝေမှုအောင်မြင်ရန် curl_share_init () နှင့်ဆက်စပ်သောလုပ်ဆောင်ချက်များကိုသုံးနိုင်သည်။ သို့သော် developer များစွာသည်ဤအင်္ဂါရပ်ကိုအသုံးပြုရန်ကြိုးစားသောအခါဘုံပြ problem နာတစ်ခုနှင့်ကြုံတွေ့ရပါလိမ့်မည်။ ဤဆောင်းပါးသည်ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများနှင့်ဖြေရှင်းနည်းများကိုအသေးစိတ်လေ့လာလိမ့်မည်။

1 ။ အခြေခံအသုံးပြုမှုကိုပြန်လည်သုံးသပ်

ပထမ ဦး စွာ cookies များကိုမျှဝေရန် Curl_share_init ကို မည်သို့အသုံးပြုရမည်ကိုလျင်မြန်စွာပြန်လည်သုံးသပ်ကြပါစို့။

 $sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

$ch1 = curl_init('https://m66.net/login');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_COOKIEFILE, '');
curl_setopt($ch1, CURLOPT_SHARE, $sh);
// ဒီတောင်းဆိုမှုကိုသတ်မှတ်လိမ့်မည်ဟုယူဆ Cookie
$response1 = curl_exec($ch1);

$ch2 = curl_init('https://m66.net/profile');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_COOKIEFILE, '');
curl_setopt($ch2, CURLOPT_SHARE, $sh);
// ငါဒီကဒီမှာနောက်ဆုံးတောင်းဆိုထားသော settings ကိုပေးပို့ပါလိမ့်မယ်မျှော်လင့်ပါတယ် Cookie
$response2 = curl_exec($ch2);

curl_close($ch1);
curl_close($ch2);
curl_share_close($sh);

code ၏ယုတ္တိဗေဒမှ curl_share_settopt () curl_lock_data_cookie မှတဆင့် cookies များကိုမျှဝေခြင်းကိုနားလည်ရန်မျှော်လင့်ပါသည်။ သို့သော် developer အတော်များများက ဒုတိယတောင်းဆိုချက်သည်ပထမတောင်းဆိုချက်အရ cookie နှင့်အတူမလာကြောင်း အစီရင်ခံခဲ့သည်။

2 ။ cookies တွေကိုဘာကြောင့်မျှဝေမထားဘူးလား။

1 ။ curlopt_cookiejar သို့မဟုတ် curlopt_cookieffile ကို ခိုင်လုံသောလမ်းကြောင်းတစ်ခုအဖြစ်သတ်မှတ်ခြင်းမရှိပါ

ကျွန်ုပ်တို့သည်မျှဝေထားသော cookies များကိုသတ်မှတ်ထားသော်လည်း Libcul သည် cookies များကိုအလိုအလျောက်သိမ်းဆည်းခြင်းသို့မဟုတ်မရေးပါနှင့်။

  • curlopt_cookiekeiek : ရှိပြီးသား cookie ဖိုင်များကိုဖတ်ပါ

  • curlopt_cookiejar : တောင်းဆိုမှုအပြီး cookie ဖိုင်ကိုရေးပါ

'' (အချည်းနှီးသော string) ကိုသတ်မှတ်ပါ - မှတ်ဥာဏ် cookie ကို processing ကို enable လုပ်နိုင်ပေမယ့် curl_share_ * နှင့်ပေါင်းစပ်သောအခါဤနည်းလမ်းသည်မတည်မငြိမ်ဖြစ်နိုင်သည်။

2 ။ Libcurl နှင့် PHP Binding အကြားအကောင်အထည်ဖော်မှုကွာခြားချက်

PHP ၏ curl extension သည် libcurrl စာကြည့်တိုက်ကိုအသုံးပြုသည်။ အချို့သောပလက်ဖောင်းများ (သို့) ဗားရှင်းများတွင် curl_share_ * ၏အပြုအမူသည်တရားဝင်စာရွက်စာတမ်းများဖော်ပြချက်မှအနည်းငယ်ကွဲပြားနိုင်သည်။ အထူးသဖြင့် cookies များပါ 0 င်သည့်အပိုင်းများသည် curl_lock_data_cookie ကို အဆင့်နိမ့် libcurl ဖြင့်အသုံးပြုရန်ပိုမိုဒီဇိုင်းရေးဆွဲထားပြီး PHP ပြီးနောက်ဖုန်းခေါ်ဆိုမှုနည်းလမ်းကိုလိုက်နာရန်မိတ္တူကူးထားခြင်းဖြစ်သည်။

3 ။ Cookie လမ်းကြောင်းသို့မဟုတ်ဒိုမိန်းအမည်မတိုက်ဆိုင်

ကွတ်ကီးများသည်လမ်းကြောင်း (လမ်းကြောင်း) နှင့်ဒိုမိန်း (ဒိုမိန်း) ကန့်သတ်ချက်များရှိသည်။ တောင်းဆိုထားသော URL domain name သည်ကွဲပြားခြားနားလျှင် (subddomain အမည်ကွဲပြားလျှင်ပင်) cookie ကိုမပို့ပါ။ အလားတူပင်ဆိုလျှင်ဆာဗာမှ cookie သည်သတ်သတ်မှတ်မှတ်လမ်းကြောင်းအတွက်သာတရားဝင်သည်ဆိုပါကလာမည့်တောင်းဆိုထားသောလမ်းကြောင်းကိုမပါ 0 င်ပါက cookie ကိုအလိုအလျောက်ပူးတွဲပါ။

3 ။ အကြံပြုချက်ဖြေရှင်းချက်

နည်းလမ်း 1 - curlopt_cookiefile နှင့် curlookiejar ကို သုံးပါ

ရှင်းလင်းပြတ်သားစွာစီမံခန့်ခွဲမှုအတွက်ယာယီ cookie ဖိုင်များကိုအသုံးပြုခြင်းသည်အလွယ်ကူဆုံးနှင့်ယုံကြည်စိတ်ချရသောနည်းဖြစ်သည်။

 $tmpCookieFile = tempnam(sys_get_temp_dir(), 'cookie');

$ch1 = curl_init('https://m66.net/login');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_COOKIEJAR, $tmpCookieFile);
curl_setopt($ch1, CURLOPT_COOKIEFILE, $tmpCookieFile);
$response1 = curl_exec($ch1);

$ch2 = curl_init('https://m66.net/profile');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_COOKIEJAR, $tmpCookieFile);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $tmpCookieFile);
$response2 = curl_exec($ch2);

ဤနည်းလမ်းသည် curl_share_ ကိုအားမလွယ်ကူပါ။ cookies များကိုသိမ်းဆည်းထားပြီးပြန်လည်ထူထောင်နိုင်ပြီး PHP စီမံကိန်းအများစုအတွက်သင့်တော်ကြောင်းသေချာစေသည်။

နည်းလမ်း 2. cookie ခေါင်းစီးများကိုကိုယ်တိုင်စီမံပါ

အကယ်. သင်သည် cookies များကိုပိုမိုဂရုတစိုက်ထိန်းချုပ်ရန်လိုအပ်ပါကတိကျသောအဓိကတန်ဖိုးများကိုသာရွေးချယ်ခြင်းကဲ့သို့တုန့်ပြန်မှုခေါင်းစဉ်ကို curlopt_Headerfunction မှတဆင့်ဖမ်းယူနိုင်သည်

 $cookies = [];

$ch1 = curl_init('https://m66.net/login');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_HEADERFUNCTION, function($ch, $header) use (&$cookies) {
    if (preg_match('/^Set-Cookie:\s*(.*?)=([^;]*)/i', $header, $matches)) {
        $cookies[$matches[1]] = $matches[2];
    }
    return strlen($header);
});
curl_exec($ch1);
curl_close($ch1);

$cookieString = '';
foreach ($cookies as $k => $v) {
    $cookieString .= "$k=$v; ";
}

$ch2 = curl_init('https://m66.net/profile');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_COOKIE, $cookieString);
$response2 = curl_exec($ch2);

4 ။ နိဂုံးချုပ်

curl_share_init () သည် cookies များကဲ့သို့သောအချက်အလက်များကိုမျှဝေရန်ယန္တရားတစ်ခုပေးသော်လည်း PHP တွင်အသုံးပြုသောအခါအထူးဂရုပြုပါ။ cookies များကိုမျှဝေခြင်းအပြုအမူသည်ဒိုမိန်းအမည်များ, လမ်းကြောင်းများ, PHP encapsulations နှင့် libcurl ၏မူကွဲများအပါအ 0 င်အချက်အမျိုးမျိုးကြောင့်ဖြစ်သည်။ တောင်းဆိုမှုများစွာအကြား cookies များကိုသင်မျှဝေလိုပါကအလုံခြုံဆုံးနည်းလမ်းမှာ curl_share_init ကိုမှီခိုမည့်အစား cookies များကိုအသုံးပြုခြင်းသို့မဟုတ် cookies များကို အသုံးပြု. cookies များကို အသုံးပြုခြင်းနှင့် cookies များကိုအသုံးပြုခြင်း

၎င်း၏အခြေခံမူများကိုနားလည်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်တည်ငြိမ်သော HTTP client Logic ကိုပိုမိုထိရောက်စွာတည်ဆောက်နိုင်သည်။