ফর্মটিতে ওয়েবসাইট অ্যাক্সেসের ডেটা দেওয়া হয়েছে session_id, ip, user_agent
এবং নীচের শর্তাবলী অনুসরণ করে optionচ্ছিকভাবে টাইমস্ট্যাম্প দিয়ে কীভাবে আপনি অনন্য দর্শনার্থীদের মধ্যে সেশন সেরাভাবে ক্লাস্টার করবেন?
session_id
: প্রতিটি নতুন দর্শনার্থীর দেওয়া আইডি। এটির মেয়াদ শেষ হয় না, তবে ব্যবহারকারী যদি কুকিজ গ্রহণ না করে / কুকিজ সাফ করে / ব্রাউজার পরিবর্তন / ডিভাইস পরিবর্তন করে তবে সে আর স্বীকৃত হবে না
IP
বিভিন্ন ব্যবহারকারীর মধ্যে ভাগ করা যেতে পারে (একটি ফ্রি ওয়াই-ফাই ক্যাফে বা আপনার আইএসপি পুনরায় নিয়োগের আইপিগুলি কল্পনা করুন) এবং তাদের প্রায়শই কমপক্ষে 2, বাড়ি এবং কাজ থাকে।
User_agent
ব্রাউজার + ওএস সংস্করণ যা ডিভাইসগুলির মধ্যে পার্থক্য করতে দেয়। উদাহরণস্বরূপ কোনও ব্যবহারকারী ফোন এবং ল্যাপটপ উভয়ই ব্যবহার করতে পারবেন তবে উইন্ডোজ + অ্যাপল ল্যাপটপ ব্যবহারের সম্ভাবনা কম। একই সেশনের আইডিতে একাধিক ইউজারেজ রয়েছে এমন সম্ভাবনা কম is
ডেটা এখানে কোলাহল হিসাবে দেখাবে: http://sqlfiddle.com/#!2/c4de40/1
অবশ্যই, আমরা অনুমানের কথা বলছি, তবে এটি যতটা সম্ভব বাস্তবের কাছাকাছি আসার বিষয়ে। উদাহরণস্বরূপ, যদি আমরা একই আইপি এবং ইউজারেজেন্টের সীমাবদ্ধ সময় ফ্রেমে ভিন্ন সেশন_ আইডির সাথে মুখোমুখি হই তবে এটি কিছুটা ক্ষেত্রে ব্যাতিক্রম ব্যতীত একই ব্যবহারকারীর পক্ষে ন্যায্য অনুমান হবে।
সম্পাদনা: যে ভাষায় সমস্যাটি সমাধান করা হয়েছে তা হতাশাগ্রস্ত, এটি বেশিরভাগ ক্ষেত্রে যুক্তি সম্পর্কিত এবং বাস্তবায়ন নয়। সিউডোকোড ঠিক আছে।
সম্পাদনা করুন: মুরগির ধীর গতির কারণে, আপনি বিকল্পভাবে mysql পড়তে / চালাতে পারেন:
select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from
(select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
from
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
order by 1
)d
inner join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 )e
on d.nr>=e.nr