একটি PHP অ্যাপ্লিকেশন Alice ও Bob-কে সেবা দেয়, এবং দুজনেই এর সার্ভার-সাইড cURL ক্লায়েন্ট ব্যবহার করে প্রক্সির মাধ্যমে একই রিমোট সাইটে পৌঁছায়। যদি প্রতিটি অনুরোধ cookies.txt লোড করে, তবে দুজন ব্যবহারকারী একই রিমোট লগইন উত্তরাধিকার পেতে পারেন। তাদের প্রক্সি ঠিকানা বদলালেও সেই ফাইল আলাদা হয় না।

ফাইলের নাম বাছার আগে কুকির মালিক বাছুন। সাধারণত এটি অ্যাপ্লিকেশনের যৌক্তিক রিমোট সেশন: একটি স্থানীয় ব্যবহারকারী, একটি নির্দিষ্ট রিমোট অ্যাকাউন্ট এবং প্রয়োজনে একটি আলাদা ওয়ার্কস্পেস। প্রক্সি এন্ডপয়েন্ট একটি রাউটিং পছন্দ, নির্ভরযোগ্য সেশন শনাক্তকারী নয়। একাধিক ব্যবহারকারী একটি এন্ডপয়েন্ট ভাগ করতে পারেন, এবং একটি এন্ডপয়েন্ট তার এক্সিট ঘোরাতে পারে।

একই সেশনের জার লোড ও সেভ করুন

অ্যাপ্লিকেশন তার প্রমাণিত সেশনকে সার্ভার-উৎপন্ন ফাইল কী-তে ম্যাপ করতে দিন। একটি ব্যক্তিগত কুকি ডিরেক্টরি এবং বিশ্বস্ত $sessionKey সহ, cURL কনফিগারেশনের এই রূপ:

$jar = $cookieDirectory . '/' . $sessionKey . '.cookies';

$ch = curl_init('https://service.example.net/account');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://proxy.example.net:8080',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_COOKIEFILE => $jar,
    CURLOPT_COOKIEJAR => $jar,
]);

পাবলিক মধ্যস্থতাকারী অনুমোদনকারী নেটওয়ার্কে অনুমোদিত পাবলিক-সাইট সেশন পরীক্ষার জন্য, HTTP প্রক্সি তালিকা প্রার্থী এন্ডপয়েন্ট সরবরাহ করে। কনফিগার করা প্রক্সি প্রমাণীকরণ বা সংরক্ষিত প্রক্সি ক্রেডেনশিয়াল ছাড়া একটি হ্যান্ডেল ব্যবহার করুন, এবং কুকি অবস্থা তার উদ্দিষ্ট সেশনেই বরাদ্দ রাখুন। এই অংশটি একটি হ্যান্ডেল কনফিগার করে; অ্যাপ্লিকেশন স্থানান্তর সম্পন্ন করে এবং স্বাভাবিক অনুরোধ প্রবাহে ফলাফল যাচাই করে। COOKIEFILE সেশনের পূর্ববর্তী কুকি লোড করে। COOKIEJAR নির্বাচন করে হ্যান্ডেল তার সংরক্ষিত কুকি কোথায় লিখবে। শুধু আউটপুট ফাইল নির্ধারণ করলে পূর্ববর্তী লগইন লোড হয় না।

নতুন সেশন কোনো ফাইল ছাড়াই শুরু হতে পারে। তার প্রথম স্থানান্তরকে উদ্দিষ্ট জার পাথ দিন, সাইটকে কুকি প্রতিষ্ঠা করতে দিন, এবং পরবর্তী অনুরোধের জন্য ফলাফল অবস্থা সেভ করুন। কুকি ডিরেক্টরি অ্যাপ্লিকেশনের ওয়ার্কার দ্বারা লেখার যোগ্য হতে হবে এবং সর্বজনীনভাবে পরিবেশিত ডকুমেন্ট ট্রির বাইরে রাখতে হবে। দর্শনার্থীর দেওয়া ব্যবহারকারীর নাম বা পাথকে ফাইলের নামে পরিণত করবেন না; সার্ভারে বিশ্বস্ত কী খুঁজুন।

সেভের জন্য অনুরোধের জীবনচক্রে স্থান দরকার

libcurl সাধারণত হ্যান্ডেল পরিষ্কারের সময় জার লেখে। যদি অ্যাপ্লিকেশনের রিমোট বিনিময়ের পরে স্পষ্ট সেভ পয়েন্ট দরকার হয়, তবে এটি অনুরোধ করতে পারে:

curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');

এটি হ্যান্ডেলের কাছে বর্তমানে জানা কুকিগুলো তার কনফিগার করা জারে লেখে। সেই সেশনের জন্য হ্যান্ডেল ব্যবহার শেষ করুন, তারপর এটিকে অসম্পর্কিত কাজে নিয়োগ করুন। যে হ্যান্ডেলে ইতিমধ্যে Alice-এর কুকি আছে সেখানে শুধু জার পাথনেম বদলানো Bob-এর পরিচ্ছন্ন সেশন তৈরি করার সমতুল্য নয়।

সফল ডাউনলোড ও সফল সংরক্ষণকেও আলাদা করুন। কুকি-জার ডকুমেন্টেশন উল্লেখ করে যে পরিষ্কারের সময় লেখার ব্যর্থতা সাধারণ স্থানান্তর ত্রুটি হিসেবে ফেরত দেওয়া হয় না। যখন একটি অনুরোধে লগইন কাজ করে আর পরেরটিতে উধাও হয়, তখন ডিরেক্টরির মালিকানা, অনুমতি এবং অ্যাপ্লিকেশনের ডায়াগনস্টিক আউটপুট পরীক্ষা করুন।

সমবর্তী অনুরোধ আরেকটি সীমা আনে। দুজন ওয়ার্কার একই পুরোনো জার লোড করতে, স্বাধীনভাবে তাদের ইন-মেমরি অবস্থা বদলাতে এবং তারপর ভিন্ন ফলাফল সেভ করতে পারেন। যদি দুটি অনুরোধই একটি রিমোট লগইন ভাগ করে, তবে প্রতি-সেশন লক বা সমতুল্য সিরিয়ালাইজেশনকে পুরো লোড, বিনিময় ও সেভ ক্রমটি ঢাকতে হবে; কেবল শেষ লেখা লক করলে তাদের আগের স্ন্যাপশট মিলিয়ে দেয় না। ভিন্ন সেশনের ভিন্ন ফাইল ও স্বাধীন লক থাকা উচিত।

লগআউটে, উদ্দিষ্ট রিমোট সেশন শেষ করুন এবং অ্যাপ্লিকেশনের নীতি অনুসারে তার স্থানীয় কুকি অবস্থা অবসর দিন। এরপর নতুনভাবে বাছাই করা প্রক্সি ব্যবহারকারীর শুরু করা যেকোনো নতুন সেশনে সংযুক্ত হতে পারে, প্রক্সি ঠিকানাকে মেমরিতে কার লগইন আছে তা নির্ধারণের দায়িত্ব না দিয়ে।

সম্পর্কিত নিবন্ধ