কুকিজ বোঝা

কুকি হলো ব্রাউজারে সংরক্ষিত এক খণ্ড ডেটা, যা কোনো ওয়েবসাইটের বৈশিষ্ট্যসমূহ কার্যকর করার জন্য প্রয়োজনীয় অবস্থা ও অন্যান্য তথ্য সংরক্ষণ করতে ব্যবহৃত হয়।

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

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

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

কুকিজের কার্যকারিতা

ধরুন আপনার একটি ব্লগ আছে যেখানে আপনি ব্যবহারকারীদের একটি "নতুন কী আছে" প্রোমো দেখাতে চান। ব্যবহারকারীরা প্রোমোটি বাতিল করে দিতে পারেন এবং এরপর কিছু সময়ের জন্য তারা এটি আর দেখতে পাবেন না। আপনি এই পছন্দটি একটি কুকিতে সংরক্ষণ করতে পারেন, সেটির মেয়াদ এক মাস (২৬,০০,০০০ সেকেন্ড) পর শেষ হওয়ার জন্য সেট করতে পারেন এবং শুধুমাত্র HTTPS-এর মাধ্যমে পাঠাতে পারেন। সেই হেডারটি দেখতে এইরকম হবে:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
একটি প্রতিক্রিয়ায় সার্ভার থেকে ব্রাউজারে তিনটি কুকি পাঠানো হচ্ছে।
সার্ভারগুলো Set-Cookie হেডার ব্যবহার করে কুকি সেট করে।

যখন আপনার পাঠক এমন একটি পৃষ্ঠা দেখেন যা এই শর্তগুলো পূরণ করে—অর্থাৎ তিনি একটি সুরক্ষিত সংযোগে আছেন এবং কুকিটির বয়স এক মাসের কম—তখন তার ব্রাউজার অনুরোধে এই হেডারটি পাঠাবে:

Cookie: promo_shown=1
একটি অনুরোধের অংশ হিসেবে ব্রাউজার থেকে সার্ভারে তিনটি কুকি পাঠানো হচ্ছে।
আপনার ব্রাউজার Cookie হেডারে কুকিগুলো ফেরত পাঠায়।

আপনি document.cookie ব্যবহার করে জাভাস্ক্রিপ্টে সেই সাইটের কুকিগুলো যোগ করতে এবং পড়তে পারেন। document.cookie তে কোনো কিছু নির্ধারণ করলে সেই কী (key) দিয়ে একটি কুকি তৈরি বা ওভাররাইড করা হবে। উদাহরণস্বরূপ, আপনি আপনার ব্রাউজারের জাভাস্ক্রিপ্ট কনসোলে নিম্নলিখিতটি চেষ্টা করতে পারেন:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

document.cookie পড়লে বর্তমান প্রেক্ষাপটে অ্যাক্সেসযোগ্য সমস্ত কুকি আউটপুট হিসেবে পাওয়া যাবে, যেখানে প্রতিটি কুকি একটি সেমিকোলন দ্বারা আলাদা করা থাকবে:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
ব্রাউজারের মধ্যে জাভাস্ক্রিপ্ট কুকি অ্যাক্সেস করছে
জাভাস্ক্রিপ্ট document.cookie ব্যবহার করে কুকি অ্যাক্সেস করতে পারে।

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

ফার্স্ট-পার্টি এবং থার্ড-পার্টি কুকি বলতে কী বোঝায়?

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

একই পৃষ্ঠার বিভিন্ন অনুরোধ থেকে ব্রাউজারে তিনটি কুকি পাঠানো হচ্ছে।
একটি পৃষ্ঠায় কুকিগুলো বিভিন্ন ডোমেইন থেকে আসতে পারে।

আগের উদাহরণটি অনুসরণ করে, ধরা যাক আপনার একটি ব্লগ পোস্টে একটি অসাধারণ বিড়ালের ছবি আছে এবং এটি /blog/img/amazing-cat.png ঠিকানায় হোস্ট করা আছে। ছবিটি এতটাই অসাধারণ যে, অন্য একজন ব্যক্তি এটি সরাসরি তার সাইটে ব্যবহার করেন। যদি কোনো ভিজিটর আপনার ব্লগ ভিজিট করে থাকেন এবং তার কাছে promo_shown কুকিটি থাকে, তাহলে যখন তিনি অন্য ব্যক্তির সাইটে amazing-cat.png ছবিটি দেখবেন, তখন ছবিটির জন্য করা সেই রিকোয়েস্টের সাথে কুকিটিও পাঠানো হবে । এটি কারও জন্যই তেমন উপকারী নয়, কারণ promo_shown অন্য ব্যক্তির সাইটে কোনো কাজেই ব্যবহৃত হয় না, এটি শুধু রিকোয়েস্টের বোঝা বাড়িয়ে দেয়।

যদি এটি একটি অনাকাঙ্ক্ষিত প্রভাব হয়, তবে আপনি কেন এটি করতে চাইবেন? এই পদ্ধতিটিই সাইটগুলোকে তৃতীয় পক্ষের প্রেক্ষাপটে ব্যবহৃত হওয়ার সময় তাদের অবস্থা বজায় রাখতে সাহায্য করে। উদাহরণস্বরূপ, আপনি যদি আপনার সাইটে একটি ইউটিউব ভিডিও এমবেড করেন, তাহলে দর্শকরা প্লেয়ারে একটি "পরে দেখুন" (Watch later) বিকল্প দেখতে পাবেন। যদি আপনার দর্শক ইতিমধ্যেই ইউটিউবে সাইন ইন করে থাকেন, তাহলে একটি তৃতীয় পক্ষের কুকির মাধ্যমে সেই সেশনটি এমবেড করা প্লেয়ারে উপলব্ধ হয়ে যায়—এর মানে হলো, "পরে দেখুন" বোতামটি তাদের সাইন ইন করতে বলার বা আপনার পৃষ্ঠা থেকে অন্যত্র ইউটিউবে ফিরে যাওয়ার পরিবর্তে একবারে ভিডিওটি সংরক্ষণ করে ফেলবে।

একই কুকি তিনটি ভিন্ন প্রেক্ষাপটে পাঠানো হচ্ছে
বিভিন্ন পৃষ্ঠা পরিদর্শনের সময় তৃতীয় পক্ষের প্রেক্ষাপটে একটি কুকি পাঠানো হয়।

ওয়েবের অন্যতম একটি সাংস্কৃতিক বৈশিষ্ট্য হলো এটি স্বভাবতই উন্মুক্ত থাকে। এর ফলেই বহু মানুষ সেখানে তাদের নিজস্ব কন্টেন্ট এবং অ্যাপ তৈরি করতে পেরেছে। তবে, এটি বেশ কিছু নিরাপত্তা এবং গোপনীয়তার উদ্বেগও সৃষ্টি করেছে। ক্রস-সাইট রিকোয়েস্ট ফোরজারি (CSRF) আক্রমণ এই নীতির উপর নির্ভর করে যে, অনুরোধটি যেই শুরু করুক না কেন, একটি নির্দিষ্ট অরিজিনে করা যেকোনো অনুরোধের সাথে কুকি সংযুক্ত থাকে। উদাহরণস্বরূপ, আপনি যদি evil.example সাইটটি ভিজিট করেন, তবে এটি your-blog.example এ অনুরোধ পাঠাতে পারে এবং আপনার ব্রাউজার সানন্দে সংশ্লিষ্ট কুকিগুলো সংযুক্ত করে নেবে। আপনার ব্লগ যদি এই অনুরোধগুলো যাচাই করার ক্ষেত্রে সতর্ক না থাকে, তবে evil.example আপনার ব্লগের পোস্ট মুছে ফেলা বা নিজস্ব কন্টেন্ট যোগ করার মতো পদক্ষেপ নিতে পারে।

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

উপযুক্ত SameSite অ্যাট্রিবিউট সেট করার মাধ্যমে আপনি কুকির সাহায্যে আপনার অভিপ্রায় স্পষ্টভাবে জানাতে পারেন।

আপনার ফার্স্ট-পার্টি কুকি শনাক্ত করতে এবং উপযুক্ত অ্যাট্রিবিউট সেট করতে, ফার্স্ট-পার্টি কুকি রেসিপি দেখুন।