আপনি যদি একটি “Last Login” প্লাগইন ইনস্টল করেন এবং হঠাৎ আপনার WordPress Users স্ক্রিনটি গোছানো মনে হয়, তবে সেই পরিচ্ছন্নতা আপনাকে ধোঁকা দিচ্ছে। তারিখগুলো বেশ নির্ভরযোগ্য মনে হয়। আপনি সেগুলো সর্ট (sort) করতে পারেন। সেগুলো একদম বাস্তব তথ্যের মতো মনে হয়। কিন্তু আসলে তা নয়। WordPress কখনোই কোনো নেটিভ (native) লাস্ট-লগইন তারিখ সংরক্ষণ করেনি, এবং সেই কলামের প্রতিটি মান আসলে একটি বেছে নেওয়া স্মৃতির অবশিষ্টাংশ মাত্র।

যে ইতিহাস কখনোই ছিল না

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

যখন আপনি এই ঘাটতি পূরণের জন্য একটি প্লাগইন ইনস্টল করেন, তখন এটি লগইন প্রক্রিয়ার সাথে যুক্ত হয় এবং user metadata-তে একটি টাইমস্ট্যাম্প (timestamp) লিখে রাখে। এটাই এর পুরো কার্যপদ্ধতি। এটি আপনার সার্ভার লগগুলোতে অতীতে ফিরে যায় না বা পূর্ববর্তী সেশনগুলো পুনর্গঠন করে না। এটি কেবল আপনি এটি সক্রিয় করার মুহূর্ত থেকে পর্যবেক্ষণ করা শুরু করে।

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

তিনটি উপায়ে এই কলাম আপনাকে বিভ্রান্ত করে

একবার প্লাগইনটি চালু হয়ে গেলে, বিভ্রান্তিটি হারিয়ে যাওয়া ইতিহাস থেকে বর্তমান সময়ের ভুল রিপোর্টিংয়ে পরিবর্তিত হয়। এখানে তিনটি নির্দিষ্ট ফাঁদ রয়েছে।

এটি অথেন্টিকেশন ট্র্যাক করে, অ্যাক্টিভিটি নয়

যখন একজন ব্যবহারকারী WordPress লগইন স্ক্রিনে “Remember Me” চেক করেন, তখন ব্রাউজার একটি অথেন্টিকেশন কুকি (authentication cookie) পায় যা চৌদ্দ দিন পর্যন্ত বৈধ থাকতে পারে। এই সময়ের মধ্যে, ব্যবহারকারী কোনো পাসওয়ার্ড পুনরায় টাইপ না করেই ড্যাশবোর্ড খুলতে পারেন, পোস্ট প্রকাশ করতে পারেন, কমেন্ট মডারেট করতে পারেন এবং সেটিংস আপডেট করতে পারেন। তাদের সেশনটি তখন সচল এবং সক্রিয় থাকে।

তবে বেশিরভাগ last-login প্লাগইন wp_login অ্যাকশনের জন্য অপেক্ষা করে। এই অ্যাকশনটি কেবল তখনই কার্যকর হয় যখন ফর্মের মাধ্যমে ক্রেডেনশিয়াল (credentials) জমা দেওয়া হয়, কোনো বিদ্যমান সেশন রিফ্রেশ করার সময় নয়। তাই আপনার এডিটর সোমবার সকালে লগইন করতে পারেন, ব্রাউজার সেশনটি সচল রাখতে পারেন এবং টানা দুই সপ্তাহ প্রতিদিন অ্যাডমিন এরিয়াতে কাজ করতে পারেন। তবুও কলামে দেখাবে যে লগইনটি চৌদ্দ দিন আগে করা হয়েছে। সেই টাইমস্ট্যাম্পের ওপর ভিত্তি করে করা একটি সিকিউরিটি রিভিউ অ্যাকাউন্টটিকে 'ডরম্যান্ট' (dormant) বা নিষ্ক্রিয় হিসেবে চিহ্নিত করতে পারে। কিন্তু এটি মোটেও নিষ্ক্রিয় নয়। আপনি আসলে দেখছেন কখন একটি পাসওয়ার্ড টাইপ করা হয়েছিল, একজন মানুষ শেষ কখন আপনার সাইটে সক্রিয় ছিল তা নয়।

এটি অডিটের সময় নিষ্ক্রিয় অ্যাকাউন্টগুলোকে লুকিয়ে ফেলে

বেশিরভাগ প্লাগইন users table-এর সাথে usermeta table যুক্ত করে এই সর্টেবল (sortable) কলামটি তৈরি করে। কাঠামোগতভাবে এটি যুক্তিযুক্ত। কিন্তু ব্যবহারিক ক্ষেত্রে এটি একটি ভিজিবিলিটি বাগ (visibility bug) তৈরি করে।

আপনি প্লাগইনটি সক্রিয় করার পর থেকে যদি কোনো ব্যবহারকারী কখনো অথেন্টিকেট না করে থাকেন, তবে usermeta-তে সেই কী (key)-এর জন্য কোনো রো (row) থাকবে না। আপনি যখন সবচেয়ে পুরনো অ্যাকাউন্টগুলো খুঁজে পেতে “Last Login” দিয়ে ইউজার লিস্ট সর্ট করেন, তখন নিচের কুয়েরিটি (query) প্রায়ই সেই ইউজারদের বাদ দিয়ে দেয় যাদের মেটাডেটা নেই। তারা সর্ট করা ভিউ থেকে সম্পূর্ণভাবে হারিয়ে যায়।

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

ডেটা কেবল তখনই থাকে যখন তা অকেজো

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

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