কুকি বা স্থানীয় সঞ্চয়স্থান ছাড়াই ব্যবহারকারীর স্বীকৃতি


132

আমি একটি বিশ্লেষণকারী সরঞ্জাম তৈরি করছি এবং আমি বর্তমানে তাদের ব্যবহারকারীর এজেন্টের কাছ থেকে ব্যবহারকারীর আইপি ঠিকানা, ব্রাউজার এবং অপারেটিং সিস্টেমটি পেতে পারি।

আমি ভাবছি কি কুকি বা স্থানীয় সঞ্চয়স্থান ব্যবহার না করে একই ব্যবহারকারীর সনাক্ত করার সম্ভাবনা আছে? আমি এখানে কোড উদাহরণগুলি আশা করি না; আরও দেখার জন্য যেখানে একটি সহজ ইঙ্গিত।

এটি একই কম্পিউটার / ডিভাইস হলে এটি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ হওয়া দরকার তা ভুলে গিয়েছিলেন। মূলত আমি ডিভাইস সনাক্তকরণের পরে আসলেই ব্যবহারকারী নই।


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

2
তারপরে আপনি জানেন না যে সেশনগুলি কী। আপনার ব্যবহারের ক্ষেত্রে সেশনগুলির জন্য ঠিক কী নকশা করা হয়েছিল। লগ ইন বা প্রমাণীকরণের সাথে সেশনগুলির কোনও সম্পর্ক নেই। আপনার ওয়েব সার্ভার ক্লায়েন্টকে একটি সেশন শনাক্তকারী সহ একটি কুকি প্রেরণ করতে বলবে। আপনি যে ক্লায়েন্টকে তারা পাঠিয়েছে সেগুলি ব্যবহার করে আপনি তাদের শনাক্ত করুন।
ম্যান ভিএস কোড

4
কুকিজ এখনও কাজ করবে? আপনি কুকি ব্যবহার করা কেন এড়িয়ে যাচ্ছেন?
বাবা

2
এটি সত্যিই সহজ এবং আমি এটি সর্বদা ব্যবহার করি, ব্যবহারকারীকে একটি ব্যবহারকারী নাম এবং একটি পাসওয়ার্ড লিখতে বলি !!!
অমিত কৃপলানী

2
এখানে একটি ন্যূনতম জাভাস্ক্রিপ্ট সমাধান রয়েছে (এক্ষেত্রে ক্রস ব্রাউজার নন): github.com/carlo/jquery-browser-fingerprint আমি এটি উল্লেখ করেছি, কারণ এটি আমাকে এই ধারণাটিতে নিয়ে এসেছিল যে অনেকগুলি প্লাগইন ডিফল্টরূপে ক্রস-ব্রাউজার ইনস্টল করা আছে, ছাড়াই without ব্যবহারকারীর পক্ষ থেকে যে কোনও পছন্দ। এগুলিকে সাবধানে বাছাই করা (যা কোনও ছোট কাজ নয়, তবে এখনও ...) সম্ভবত কোনও বৃহত ডিভাইস-ভিত্তিক ফিঙ্গারপ্রিন্টের একটি স্পষ্টত ব্রাউজার-অজ্ঞান সম্পর্কিত সম্পত্তি হতে পারে।
হেক্সালিস

উত্তর:


389

ভূমিকা

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনার এমন কোনও ব্যবহারকারীকে সনাক্ত করতে হবে যার জন্য আপনার কোনও অনন্য পরিচয়দাতা নেই, তাই আপনি এলোমেলো ডেটার সাথে ম্যাচ করে এটি সনাক্ত করতে চান। আপনি ব্যবহারকারীর পরিচয় নির্ভরযোগ্যভাবে সংরক্ষণ করতে পারবেন না কারণ:

  • কুকিজ মুছে ফেলা যায়
  • আইপি ঠিকানা পরিবর্তন করতে পারেন
  • ব্রাউজার পরিবর্তন করতে পারে
  • ব্রাউজার ক্যাশে মুছে ফেলা হতে পারে

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

কুকিজ এবং অন্যান্য, অনুরূপ সরঞ্জাম

আপনি কোনও ডেটা প্রোফাইল তৈরির কথা বিবেচনা করতে পারেন এবং তারপরে কোনও সম্ভাব্য ব্যবহারকারীকে সনাক্ত করার জন্য সম্ভাব্যতা পরীক্ষাগুলি ব্যবহার করে । নিম্নলিখিতগুলির সংমিশ্রণে এর জন্য দরকারী একটি প্রোফাইল তৈরি করা যেতে পারে:

  1. আইপি ঠিকানা
    • আসল আইপি ঠিকানা Address
    • প্রক্সি আইপি ঠিকানা (ব্যবহারকারীরা প্রায়শই একই প্রক্সি বারবার ব্যবহার করেন)
  2. বিস্কুট
  3. ওয়েব বাগ (কম নির্ভরযোগ্য কারণ বাগগুলি স্থির হয়ে গেলেও এখনও দরকারী)
    • পিডিএফ বাগ
    • ফ্ল্যাশ বাগ
    • জাভা বাগ
  4. ব্রাউজার
    • ট্র্যাকিং ক্লিক করুন (অনেক ব্যবহারকারী প্রতিটি ভিজিটে একই সিরিজের পৃষ্ঠাগুলি যান)
    • ব্রাউজারগুলির আঙুলের মুদ্রণ - ইনস্টল হওয়া প্লাগইনগুলি (লোকেরা প্রায়শই বৈচিত্র্যময় থাকে, প্লাগইনগুলির কিছুটা পৃথক সেট থাকে)
    • ক্যাশেড ছবিগুলি (লোকেরা কখনও কখনও তাদের কুকিগুলি মুছে ফেলে তবে ক্যাশেড ছবিগুলি ছেড়ে দেয়)
    • ব্লব ব্যবহার করা
    • ইউআরএল (গুলি) (ব্রাউজারের ইতিহাস বা কুকিজগুলিতে ইউআরএলগুলিতে অনন্য ইউজার আইডি থাকতে পারে যেমন https://stackoverflow.com/users/1226894 বা http://www.facebook.com/barackobama?fref=ts )
    • সিস্টেম হরফ সনাক্তকরণ (এটি সামান্য পরিচিত তবে প্রায়শই অনন্য কী স্বাক্ষর)
  5. এইচটিএমএল 5 এবং জাভাস্ক্রিপ্ট
    • এইচটিএমএল 5 লোকালস্টোরেশন
    • এইচটিএমএল 5 জিওলোকেশন এপিআই এবং বিপরীত জিওকোডিং
    • আর্কিটেকচার, ওএস ল্যাঙ্গুয়েজ, সিস্টেমের সময়, স্ক্রিন রেজোলিউশন ইত্যাদি
    • নেটওয়ার্ক তথ্য API
    • ব্যাটারির স্থিতি এপিআই

আমি তালিকাভুক্ত আইটেমগুলি অবশ্যই ব্যবহারকারীকে অনন্য সনাক্তকরণের কয়েকটি সম্ভাব্য উপায়। আরও অনেক আছে।

এ থেকে এলোমেলো উপাত্ত উপাদানগুলির একটি সেট থেকে একটি ডেটা প্রোফাইল তৈরি করতে, এর পরে কী হবে?

পরবর্তী পদক্ষেপটি হ'ল কিছু अस्पष्ट লজিক বা আরও উন্নততর একটি কৃত্রিম নিউরাল নেটওয়ার্ক (যা ফাজি যুক্তি ব্যবহার করে) বিকাশ করে । উভয় ক্ষেত্রেই, ধারণাটি হ'ল আপনার সিস্টেমকে প্রশিক্ষণ দেওয়া, এবং তারপরে আপনার ফলাফলের যথার্থতা বাড়াতে বায়েসিয়ান ইনফারেন্সের সাথে এর প্রশিক্ষণটি একত্রিত করুন ।

কৃত্রিম নিউরাল নেটওয়ার্ক

NeuralMesh পিএইচপি জন্য আপনার লাইব্রেরি কৃত্রিম নিউরাল নেটওয়ার্ক উত্পন্ন করতে পারবেন। বায়েশিয়ান অনুমান প্রয়োগ করতে, নীচের লিঙ্কগুলি দেখুন:

এই মুহুর্তে, আপনি ভাবতে পারেন:

আপাতদৃষ্টিতে সহজ কাজের জন্য এত ম্যাথ এবং লজিক কেন?

মূলত, কারণ এটি কোনও সহজ কাজ নয় । আপনি যা অর্জন করার চেষ্টা করছেন তা হ'ল প্রকৃত সম্ভাবনা । উদাহরণস্বরূপ, নিম্নলিখিত পরিচিত ব্যবহারকারীদের দেওয়া:

User1 = A + B + C + D + G + K
User2 = C + D + I + J + K + F

আপনি যখন নিম্নলিখিত তথ্য পাবেন:

B + C + E + G + F + K

আপনি যে প্রশ্নটি মূলত জিজ্ঞাসা করছেন তা হ'ল:

প্রাপ্ত ডেটা (বি + সি + ই + জি + এফ + কে) আসলে ইউজার 1 বা ইউজার 2 হওয়ার সম্ভাবনা কত? এবং এই দুটি ম্যাচের মধ্যে কোনটি সবচেয়ে সম্ভাব্য?

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

ডাটা পয়েন্টের সিরিজের যা (উপরোক্ত উদাহরণের b + c + E ব্যবহার + + G + এ এফ + + কে) আপনার ডেটা প্রোফাইল গঠিত হিসেবে একটি মুহূর্ত জন্য মনে লক্ষণ , এবং অজানা ব্যবহারকারী রোগ । রোগটি সনাক্ত করে, আপনি আরও উপযুক্ত চিকিত্সাটি সনাক্ত করতে পারবেন (এই ব্যবহারকারীকে ব্যবহারকারী 1 হিসাবে গণ্য করুন)।

স্পষ্টতই, এমন একটি রোগ যার জন্য আমরা 1 টিরও বেশি লক্ষণ চিহ্নিত করেছি এটি সনাক্ত করা সহজ। প্রকৃতপক্ষে, আমরা যত বেশি লক্ষণগুলি সনাক্ত করতে পারি, তত সহজেই আমাদের নির্ণয়ের সুনির্দিষ্ট।

অন্য কোন বিকল্প আছে?

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

উদাহরণ হিসাবে, এই সাধারণ স্কোর চার্টটি বিবেচনা করুন:

+ + ------------------------- + + -------- + + ------------ + +
| সম্পত্তি | ওজন | গুরুত্ব |
+ + ------------------------- + + -------- + + ------------ + +
| আসল আইপি ঠিকানা | 60 | 5 |
| ব্যবহৃত প্রক্সি আইপি ঠিকানা | 40 | 4 |
| এইচটিটিপি কুকিজ | 80 | 8 |
| সেশন কুকিজ | 80 | 6 |
| তৃতীয় পক্ষের কুকিজ | 60 | 4 |
| ফ্ল্যাশ কুকিজ | 90 | 7 |
| পিডিএফ বাগ | 20 | 1 |
| ফ্ল্যাশ বাগ | 20 | 1 |
| জাভা বাগ | 20 | 1 |
| ঘন ঘন পৃষ্ঠা | 40 | 1 |
| ব্রাউজারগুলির ফিঙ্গার প্রিন্ট | 35 | 2 |
| ইনস্টল করা প্লাগইনস | 25 | 1 |
| ক্যাশেড ছবি | 40 | 3 |
| ইউআরএল | 60 | 4 |
| সিস্টেম হরফ সনাক্তকরণ | 70 | 4 |
| লোকালস্টোরেজ | 90 | 8 |
| ভূ-অবস্থান | 70 | 6 |
| এওএলটিআর | 70 | 4 |
| নেটওয়ার্ক তথ্য এপিআই | 40 | 3 |
| ব্যাটারির স্থিতি এপিআই | 20 | 1 |
+ + ------------------------- + + -------- + + ------------ + +

প্রদত্ত অনুরোধের ভিত্তিতে আপনি যে তথ্য সংগ্রহ করতে পারেন তার প্রতিটি অংশের জন্য, সম্পর্কিত স্কোরকে পুরষ্কার দিন, তারপরে স্কোরগুলি সমান হলে বিরোধগুলি সমাধান করার জন্য গুরুত্ব ব্যবহার করুন ।

ধারণার প্রমাণ

ধারণার সাধারণ প্রমাণের জন্য দয়া করে পেরসেপ্ট্রনটি একবার দেখুন । পারসেপ্ট্রন একটি আরএনএ মডেল যা সাধারণত প্যাটার্ন স্বীকৃতি প্রয়োগগুলিতে ব্যবহৃত হয়। এমনকি একটি পুরাতন পিএইচপি ক্লাস রয়েছে যা একে পুরোপুরি প্রয়োগ করে, তবে আপনাকে সম্ভবত এটি আপনার উদ্দেশ্যে পরিবর্তন করতে হবে।

একটি দুর্দান্ত সরঞ্জাম হওয়া সত্ত্বেও Perceptron এখনও একাধিক ফলাফল (সম্ভাব্য ম্যাচ) আসতে পারেন, একটি স্কোর এবং পার্থক্য তুলনা ব্যবহার তাই এখনো শনাক্ত করতে সহায়ক সেরা সেই ম্যাচের।

অনুমিতি

  • প্রতিটি ব্যবহারকারীর সম্পর্কে সমস্ত সম্ভাব্য তথ্য (আইপি, কুকিজ ইত্যাদি) সংরক্ষণ করুন
  • যেখানে ফলাফলটি হুবহু মিল, সেখানে স্কোর বাড়িয়ে
  • যেখানে ফলাফলটি হুবহু মিল নয়, সেখানে স্কোর হ্রাস করুন

প্রত্যাশা

  1. আরএনএ লেবেল তৈরি করুন
  2. একটি ডাটাবেস অনুকরণ করে এলোমেলো ব্যবহারকারী তৈরি করুন
  3. একক অজানা ব্যবহারকারী তৈরি করুন
  4. অজানা ব্যবহারকারী আরএনএ এবং মানগুলি তৈরি করুন
  5. সিস্টেমটি আরএনএ তথ্যগুলিকে একীভূত করবে এবং পেরসেপ্ট্রনকে শেখাবে
  6. পারসেপ্ট্রন প্রশিক্ষণ দেওয়ার পরে, সিস্টেমটির ওজনগুলি একটি সেট হবে
  7. আপনি এখন অজানা ব্যবহারকারীর প্যাটার্নটি পরীক্ষা করতে পারেন এবং পারসেপ্ট্রন একটি ফলাফল সেট তৈরি করবে।
  8. সমস্ত ধনাত্মক মিল সংরক্ষণ করুন
  9. ম্যাচগুলি প্রথমে স্কোর অনুসারে বাছাই করুন, তারপরে পার্থক্য অনুসারে (উপরে বর্ণিত হিসাবে)
  10. দুটি নিকটতম ম্যাচ আউটপুট করুন, বা, কোনও মিল না পাওয়া গেলে খালি ফলাফল আউটপুট করুন

প্রুফ অফ কনসেপ্টের কোড

$features = array(
    'Real IP address' => .5,
    'Used proxy IP address' => .4,
    'HTTP Cookies' => .9,
    'Session Cookies' => .6,
    '3rd Party Cookies' => .6,
    'Flash Cookies' => .7,
    'PDF Bug' => .2,
    'Flash Bug' => .2,
    'Java Bug' => .2,
    'Frequent Pages' => .3,
    'Browsers Finger Print' => .3,
    'Installed Plugins' => .2,
    'URL' => .5,
    'Cached PNG' => .4,
    'System Fonts Detection' => .6,
    'Localstorage' => .8,
    'Geolocation' => .6,
    'AOLTR' => .4,
    'Network Information API' => .3,
    'Battery Status API' => .2
);

// Get RNA Lables
$labels = array();
$n = 1;
foreach ($features as $k => $v) {
    $labels[$k] = "x" . $n;
    $n ++;
}

// Create Users
$users = array();
for($i = 0, $name = "A"; $i < 5; $i ++, $name ++) {
    $users[] = new Profile($name, $features);
}

// Generate Unknown User
$unknown = new Profile("Unknown", $features);

// Generate Unknown RNA
$unknownRNA = array(
    0 => array("o" => 1),
    1 => array("o" => - 1)
);

// Create RNA Values
foreach ($unknown->data as $item => $point) {
    $unknownRNA[0][$labels[$item]] = $point;
    $unknownRNA[1][$labels[$item]] = (- 1 * $point);
}

// Start Perception Class
$perceptron = new Perceptron();

// Train Results
$trainResult = $perceptron->train($unknownRNA, 1, 1);

// Find matches
foreach ($users as $name => &$profile) {
    // Use shorter labels
    $data = array_combine($labels, $profile->data);
    if ($perceptron->testCase($data, $trainResult) == true) {
        $score = $diff = 0;

        // Determing the score and diffrennce
        foreach ($unknown->data as $item => $found) {
            if ($unknown->data[$item] === $profile->data[$item]) {
                if ($profile->data[$item] > 0) {
                    $score += $features[$item];
                } else {
                    $diff += $features[$item];
                }
            }
        }
        // Ser score and diff
        $profile->setScore($score, $diff);
        $matchs[] = $profile;
    }
}

// Sort bases on score and Output
if (count($matchs) > 1) {
    usort($matchs, function ($a, $b) {
        // If score is the same use diffrence
        if ($a->score == $b->score) {
            // Lower the diffrence the better
            return $a->diff == $b->diff ? 0 : ($a->diff > $b->diff ? 1 : - 1);
        }
        // The higher the score the better
        return $a->score > $b->score ? - 1 : 1;
    });

    echo "<br />Possible Match ", implode(",", array_slice(array_map(function ($v) {
        return sprintf(" %s (%0.4f|%0.4f) ", $v->name, $v->score,$v->diff);
    }, $matchs), 0, 2));
} else {
    echo "<br />No match Found ";
}

আউটপুট:

Possible Match D (0.7416|0.16853),C (0.5393|0.2809)

"ডি" এর মুদ্রণ_আর:

echo "<pre>";
print_r($matchs[0]);


Profile Object(
    [name] => D
    [data] => Array (
        [Real IP address] => -1
        [Used proxy IP address] => -1
        [HTTP Cookies] => 1
        [Session Cookies] => 1
        [3rd Party Cookies] => 1
        [Flash Cookies] => 1
        [PDF Bug] => 1
        [Flash Bug] => 1
        [Java Bug] => -1
        [Frequent Pages] => 1
        [Browsers Finger Print] => -1
        [Installed Plugins] => 1
        [URL] => -1
        [Cached PNG] => 1
        [System Fonts Detection] => 1
        [Localstorage] => -1
        [Geolocation] => -1
        [AOLTR] => 1
        [Network Information API] => -1
        [Battery Status API] => -1
    )
    [score] => 0.74157303370787
    [diff] => 0.1685393258427
    [base] => 8.9
)

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

+----+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+-----+----+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----------+
| o  | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 | x13 | x14 | x15 | x16 | x17 | x18 | x19 | x20 | Bias | Yin | Y  | deltaW1 | deltaW2 | deltaW3 | deltaW4 | deltaW5 | deltaW6 | deltaW7 | deltaW8 | deltaW9 | deltaW10 | deltaW11 | deltaW12 | deltaW13 | deltaW14 | deltaW15 | deltaW16 | deltaW17 | deltaW18 | deltaW19 | deltaW20 | W1 | W2 | W3 | W4 | W5 | W6 | W7 | W8 | W9 | W10 | W11 | W12 | W13 | W14 | W15 | W16 | W17 | W18 | W19 | W20 | deltaBias |
+----+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+-----+----+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----------+
| 1  | 1  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1    | 0   | -1 | 0       | -1      | -1      | -1      | -1      | -1      | -1      | 1       | 1       | 1        | 1        | 1        | 1        | 1        | -1       | -1       | -1       | -1       | 1        | 1        | 0  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1         |
| -1 | -1 | 1  | 1  | 1  | 1  | 1  | 1  | -1 | -1 | -1  | -1  | -1  | -1  | -1  | 1   | 1   | 1   | 1   | -1  | -1  | 1    | -19 | -1 | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1         |
| -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --   | --  | -- | --      | --      | --      | --      | --      | --      | --      | --      | --      | --       | --       | --       | --       | --       | --       | --       | --       | --       | --       | --       | -- | -- | -- | -- | -- | -- | -- | -- | -- | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --        |
| 1  | 1  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1    | 19  | 1  | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1         |
| -1 | -1 | 1  | 1  | 1  | 1  | 1  | 1  | -1 | -1 | -1  | -1  | -1  | -1  | -1  | 1   | 1   | 1   | 1   | -1  | -1  | 1    | -19 | -1 | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0       | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0        | 0  | -1 | -1 | -1 | -1 | -1 | -1 | 1  | 1  | 1   | 1   | 1   | 1   | 1   | -1  | -1  | -1  | -1  | 1   | 1   | 1         |
| -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --   | --  | -- | --      | --      | --      | --      | --      | --      | --      | --      | --      | --       | --       | --       | --       | --       | --       | --       | --       | --       | --       | --       | -- | -- | -- | -- | -- | -- | -- | -- | -- | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --  | --        |
+----+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+-----+----+---------+---------+---------+---------+---------+---------+---------+---------+---------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----------+

x1 থেকে x20 কোড দ্বারা রূপান্তরিত বৈশিষ্ট্যগুলি উপস্থাপন করে।

// Get RNA Labels
$labels = array();
$n = 1;
foreach ( $features as $k => $v ) {
    $labels[$k] = "x" . $n;
    $n ++;
}

এখানে একটি অনলাইন ডেমো রয়েছে

ক্লাস ব্যবহৃত:

class Profile {
    public $name, $data = array(), $score, $diff, $base;

    function __construct($name, array $importance) {
        $values = array(-1, 1); // Perception values
        $this->name = $name;
        foreach ($importance as $item => $point) {
            // Generate Random true/false for real Items
            $this->data[$item] = $values[mt_rand(0, 1)];
        }
        $this->base = array_sum($importance);
    }

    public function setScore($score, $diff) {
        $this->score = $score / $this->base;
        $this->diff = $diff / $this->base;
    }
}

পরিবর্তিত পারসেপ্ট্রন ক্লাস

class Perceptron {
    private $w = array();
    private $dw = array();
    public $debug = false;

    private function initialize($colums) {
        // Initialize perceptron vars
        for($i = 1; $i <= $colums; $i ++) {
            // weighting vars
            $this->w[$i] = 0;
            $this->dw[$i] = 0;
        }
    }

    function train($input, $alpha, $teta) {
        $colums = count($input[0]) - 1;
        $weightCache = array_fill(1, $colums, 0);
        $checkpoints = array();
        $keepTrainning = true;

        // Initialize RNA vars
        $this->initialize(count($input[0]) - 1);
        $just_started = true;
        $totalRun = 0;
        $yin = 0;

        // Trains RNA until it gets stable
        while ($keepTrainning == true) {
            // Sweeps each row of the input subject
            foreach ($input as $row_counter => $row_data) {
                // Finds out the number of columns the input has
                $n_columns = count($row_data) - 1;

                // Calculates Yin
                $yin = 0;
                for($i = 1; $i <= $n_columns; $i ++) {
                    $yin += $row_data["x" . $i] * $weightCache[$i];
                }

                // Calculates Real Output
                $Y = ($yin <= 1) ? - 1 : 1;

                // Sweeps columns ...
                $checkpoints[$row_counter] = 0;
                for($i = 1; $i <= $n_columns; $i ++) {
                    /** DELTAS **/
                    // Is it the first row?
                    if ($just_started == true) {
                        $this->dw[$i] = $weightCache[$i];
                        $just_started = false;
                        // Found desired output?
                    } elseif ($Y == $row_data["o"]) {
                        $this->dw[$i] = 0;
                        // Calculates Delta Ws
                    } else {
                        $this->dw[$i] = $row_data["x" . $i] * $row_data["o"];
                    }

                    /** WEIGHTS **/
                    // Calculate Weights
                    $this->w[$i] = $this->dw[$i] + $weightCache[$i];
                    $weightCache[$i] = $this->w[$i];

                    /** CHECK-POINT **/
                    $checkpoints[$row_counter] += $this->w[$i];
                } // END - for

                foreach ($this->w as $index => $w_item) {
                    $debug_w["W" . $index] = $w_item;
                    $debug_dw["deltaW" . $index] = $this->dw[$index];
                }

                // Special for script debugging
                $debug_vars[] = array_merge($row_data, array(
                    "Bias" => 1,
                    "Yin" => $yin,
                    "Y" => $Y
                ), $debug_dw, $debug_w, array(
                    "deltaBias" => 1
                ));
            } // END - foreach

            // Special for script debugging
             $empty_data_row = array();
            for($i = 1; $i <= $n_columns; $i ++) {
                $empty_data_row["x" . $i] = "--";
                $empty_data_row["W" . $i] = "--";
                $empty_data_row["deltaW" . $i] = "--";
            }
            $debug_vars[] = array_merge($empty_data_row, array(
                "o" => "--",
                "Bias" => "--",
                "Yin" => "--",
                "Y" => "--",
                "deltaBias" => "--"
            ));

            // Counts training times
            $totalRun ++;

            // Now checks if the RNA is stable already
            $referer_value = end($checkpoints);
            // if all rows match the desired output ...
            $sum = array_sum($checkpoints);
            $n_rows = count($checkpoints);
            if ($totalRun > 1 && ($sum / $n_rows) == $referer_value) {
                $keepTrainning = false;
            }
        } // END - while

        // Prepares the final result
        $result = array();
        for($i = 1; $i <= $n_columns; $i ++) {
            $result["w" . $i] = $this->w[$i];
        }

        $this->debug($this->print_html_table($debug_vars));

        return $result;
    } // END - train
    function testCase($input, $results) {
        // Sweeps input columns
        $result = 0;
        $i = 1;
        foreach ($input as $column_value) {
            // Calculates teste Y
            $result += $results["w" . $i] * $column_value;
            $i ++;
        }
        // Checks in each class the test fits
        return ($result > 0) ? true : false;
    } // END - test_class

    // Returns the html code of a html table base on a hash array
    function print_html_table($array) {
        $html = "";
        $inner_html = "";
        $table_header_composed = false;
        $table_header = array();

        // Builds table contents
        foreach ($array as $array_item) {
            $inner_html .= "<tr>\n";
            foreach ( $array_item as $array_col_label => $array_col ) {
                $inner_html .= "<td>\n";
                $inner_html .= $array_col;
                $inner_html .= "</td>\n";

                if ($table_header_composed == false) {
                    $table_header[] = $array_col_label;
                }
            }
            $table_header_composed = true;
            $inner_html .= "</tr>\n";
        }

        // Builds full table
        $html = "<table border=1>\n";
        $html .= "<tr>\n";
        foreach ($table_header as $table_header_item) {
            $html .= "<td>\n";
            $html .= "<b>" . $table_header_item . "</b>";
            $html .= "</td>\n";
        }
        $html .= "</tr>\n";

        $html .= $inner_html . "</table>";

        return $html;
    } // END - print_html_table

    // Debug function
    function debug($message) {
        if ($this->debug == true) {
            echo "<b>DEBUG:</b> $message";
        }
    } // END - debug
} // END - class

উপসংহার

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

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


@ বাবা একটি ব্রাউজারের ফিঙ্গারপ্রিন্টে "ব্লবগুলি ব্যবহার" বলতে কী বোঝায়?
বিলমালার্কি


1
@ বাবা কোনও ব্রাউজারের ফিঙ্গারপ্রিন্টে এটি কীভাবে ব্যবহার করবে? কোনও নির্দিষ্ট সময়ে এটিতে বর্তমানে কী রয়েছে তা একবার পরীক্ষা করে দেখুন?
বিলমালার্কি

@ বাবা দুর্দান্ত কাজ, আমি সর্বদা চেষ্টা করেছি কোনও ব্যবহারকারীর শনাক্ত করার জন্য কয়েকটি মাল্টি-লেভেল কৌশল, কিন্তু আপনি যেমন বলেছিলেন ক্যাশে সাফ করা যায়, আইপি পরিবর্তন করা যায়, প্রক্সি বা NAT এর পিছনে থাকা ব্যবহারকারীরা - বিশেষত those লোকগুলি , কুকিজ মুছে ফেলা ইত্যাদি etc. ... তবে এই সমস্ত প্রচেষ্টার পরেও এটি সম্ভাব্যতার বিষয়টি, যদি খারাপ ব্যবহারকারীর উদাহরণস্বরূপ টর ব্রাউজার ব্যবহার করা হয় তবে বেশিরভাগ ক্ষেত্রে যদি উল্লিখিত কৌশলগুলি সনাক্ত করা সমস্ত কাজ না করে। আমি ব্রাউজারলিক্স.কম পছন্দ করেছি কিন্তু টরের সাথে সমস্তই ফিরে এসেছিল অপরিজ্ঞাত বা অজানা
এমআই-ক্রিয়েটিভিটি

একটি প্রকাশনার এই রত্ন থেকে কেবল "কিছু ধুলা অপসারণ" করার উদ্দেশ্যে কেবলমাত্র একটি নোট : 07.09.17 হিসাবে ভাঙ্গা লিঙ্কগুলির তালিকা: - Implement Bayesian inference using PHPসমস্ত 3 অংশ। - Frequency vs Probability - Joint Probability -Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
জিজি

28

এই কৌশলটি (কুকিজবিহীন একই ব্যবহারকারীদের সনাক্ত করতে - এমনকি আইপি ঠিকানা ছাড়াই) বলা হয় ব্রাউজারের ফিঙ্গারপ্রিন্ট বলে । মূলত আপনি ব্রাউজার সম্পর্কে যতটা পারেন তথ্য হিসাবে ক্রল করুন - জাভাস্ক্রিপ্ট, ফ্ল্যাশ বা জাভা (f.ex. ইনস্টল করা এক্সটেনশন, ফন্ট, ইত্যাদি) দিয়ে আরও ভাল ফলাফল অর্জন করা যেতে পারে। এর পরে, আপনি চাইলে ফলাফলগুলি হ্যাশ করতে পারেন।

এটি ত্রুটিযুক্ত নয়, তবে:

দেখা ব্রাউজারগুলির মধ্যে 83.6% এর একটি অনন্য ফিঙ্গারপ্রিন্ট ছিল; ফ্ল্যাশ বা জাভা সক্ষম যাদের মধ্যে, 94.2%। এটিতে কুকিজ অন্তর্ভুক্ত নয়!

অধিক তথ্য:


আমি মনে করি, এটি এখনও উত্তর। আপনার যদি কোনও ডিভাইস সনাক্ত করতে হয় তবে আপনার কেবল সেই ডেটাগুলি পাওয়া দরকার - f.ex. ওএস, জেনেরিক এক্সটেনশানগুলি (এবং এর 'সংস্করণ), ইনস্টল করা ফন্ট ইত্যাদি ...
pozs

এটি ভাল কাজ করছে না। প্রতিটি ব্রাউজার সেশন এবং কুকিজ সমর্থন করে। কাজের জন্য সঠিক টুল ব্যবহার করুন।
ম্যান ভিএস কোড

1
@ slash197 ফাইল ক্যাশে সম্পর্কে কি? আমি বোঝাতে চাইছি 1px x 1px স্বচ্ছ ফ্ল্যাশ মিডিয়া সহ একটি এক্সএমএল ফাইলের ভিতরে অনন্য উত্পন্ন আইডি রয়েছে (এটি ব্যবহারকারীর স্থানীয় এইচডি তে ডাউনলোড করার আগে সার্ভারে একবারে এক্সএমএল তৈরি করা উচিত) এমনকি যদি ব্যবহারকারী কুকিজ বা লগআউট মুছে ফেলেন, আপনার এখনও অ্যাকশন স্ক্রিপ্ট সেন্ডঅ্যান্ডল্ড পদ্ধতি ব্যবহার করে একটি ব্রিজ থাকতে পারে।
মার্বারি

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

@ মার্বারি আমি খুব বেশি ফ্ল্যাশ ফ্যান নই তবে ব্রাউজারে যদি ফ্ল্যাশ ব্লক করা অ্যাড-অনের মতো আমার কাছে রয়েছে যে 1x1 পিক্সেল ফ্ল্যাশ মিডিয়া অক্ষম হয়ে যাবে, আমি কি রাগ করব?
স্ল্যাশ 197

7

উপরে উল্লিখিত থাম্বপ্রিন্টিং কাজ করে, তবে এখনও সমাহার ভোগ করতে পারে।

একটি উপায় হ'ল ব্যবহারকারীর সাথে প্রতিটি কথোপকথনের ইউআরএলটিতে ইউআইডি যুক্ত করা।

http://someplace.com/12899823/user/profile

যেখানে সাইটের প্রতিটি লিঙ্ক এই সংশোধকটির সাথে অভিযোজিত। এটি পৃষ্ঠাগুলির মধ্যে ফরমে ডেটা ব্যবহার করে যেভাবে এএসপি.নেট কাজ করত তার অনুরূপ।


আমি এটি ভেবেছিলাম তবে এটি ব্যবহারকারীর পক্ষে এটি সংশোধন করার সহজতম উপায়
স্ল্যাশ 197

1
আইডিটি নয় একটি স্ব-রেফারেন্সিং হ্যাশ। এটিকে ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত করে তোলে।
জাস্টিন আলেকজান্ডার

এছাড়াও, কেউ এই সাইটটি ব্রাউজ করার সময় এই পদ্ধতিটি ঠিক আছে তবে যখন কোনও প্রত্যাবর্তনকারী ব্যবহারকারী এক সপ্তাহ পরে ফিরে আসবে এবং আইডি ছাড়াই কেবল ওয়েবসাইটের ঠিকানার মধ্যে টাইপ করবেন তখন আপনি কীভাবে মামলা পরিচালনার প্রস্তাব করবেন?
স্ল্যাশ 197

@ স্ল্যাশ ১৯77 সেই ক্ষেত্রে আপনি ব্যবহারকারীকে লগইন করতে বলছেন না কেন, ব্যবহারকারী যখন কুকিগুলি মুছে ফেলেন তখনও কী ঘটে।
আকাশ কাভা

6

আপনি কি এভারকুকির দিকে নজর রেখেছেন ? এটি ব্রাউজার জুড়ে কাজ করতে বা নাও করতে পারে। তাদের সাইট থেকে একটি নির্যাস।

"যদি কোনও ব্যবহারকারী কোনও ব্রাউজারে রান্না হয়ে যায় এবং অন্য ব্রাউজারে স্যুইচ করে, ততক্ষণ তাদের কাছে লোকাল শেয়ার্ড অবজেক্ট কুকি রয়েছে, কুকি উভয় ব্রাউজারে পুনরুত্পাদন করবে" "


আমি ভাবছি এটি জাভাস্ক্রিপ্ট অক্ষম করে কাজ করে কিনা। তোমার কি কোন অভিজ্ঞতা আছে?
ভোকটাস

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

এটি যাই হোক না কেন কাজ করবে না। বর্ণনার প্রথম লাইন থেকে: 'এভারকুকি একটি জাভাস্ক্রিপ্ট এপিআই ...'। জাভাস্ক্রিপ্ট অক্ষম করা থাকলে এটি কাজ করবে না।
gdw2

এমনকি জেএস অক্ষম করতে হবে না। ঘোস্টারি এবং ইউব্লক এভারকুকি ফোঁটা
ওপেনগ্রিড

3

আপনি এটি ক্যাশেড পিএনজি দিয়ে করতে পারেন, এটি কিছুটা অবিশ্বাস্য হবে (বিভিন্ন ব্রাউজারগুলি আলাদাভাবে আচরণ করে এবং ব্যবহারকারী তাদের ক্যাশে সাফ করলে এটি ব্যর্থ হবে), তবে এটি একটি বিকল্প।

1: একটি ডেটাবেস সেট আপ করুন যা একটি হেক্স স্ট্রিং হিসাবে অনন্য ব্যবহারকারী আইডি সঞ্চয় করে

2: একটি GenUser.php (বা যে কোনও ভাষা) ফাইল তৈরি করুন যা একটি ব্যবহারকারী আইডি উত্পন্ন করে, এটি ডিবিতে সংরক্ষণ করে এবং তারপরে একটি সত্য রঙ তৈরি করে that সেই হেক্স স্ট্রিংয়ের মানগুলির বাইরে (প্রতিটি পিক্সেল 4 বাইট হবে) এবং ফিরে আসুন এটি ব্রাউজারে। কনটেন্ট টাইপ এবং ক্যাশে শিরোনাম সেট করা নিশ্চিত করুন।

3: এইচটিএমএল বা জেএস এ একটি চিত্র তৈরি করুন <img id='user_id' src='genUser.php' />

4: একটি চিত্র ক্যানভাসে আঁকুন ctx.drawImage(document.getElementById('user_id'), 0, 0);

5: ব্যবহার করে সেই চিত্রটির বাইটগুলি পড়ুন ctx.getImageData এবং পূর্ণসংখ্যাকে একটি হেক্স স্ট্রিংয়ে রূপান্তর করুন।

6: এটি আপনার অনন্য ব্যবহারকারী আইডি যা এখন আপনার ব্যবহারকারীদের কম্পিউটারে ক্যাশে হয়েছে।


তিনি এমন কিছু চান যা ব্যবহারকারীদের "ব্রাউজার জুড়ে" ট্র্যাক করতে পারে যা এখানে কাজ করবে না (প্রতিটি ব্রাউজারের নিজস্ব ক্যাশে ডাটাবেস রয়েছে)।
এরিকলও

আপনি কোথায় তা দেখছেন, তাঁর প্রশ্নটি কেবল "ক্রস-ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ হওয়া দরকার", অর্থাৎ যে কোনও ব্রাউজারে কাজ করা উচিত তা উল্লেখ করতে ভুলে গেছেন।
হোবারউইকি

তাঁর প্রশ্নটি খারাপভাবে লেখা হয়েছে। I'm after device recognitionসে কি চায় জন্য giveaway হয়, এবং তিনি এখানে ব্যাখ্যা করেছেন: stackoverflow.com/questions/15966812/...
EricLaw

2

আপনি যা বলেছেন তার উপর ভিত্তি করে:

মূলত আমি ডিভাইস সনাক্তকরণের পরে আসলেই ব্যবহারকারী নই

এটি করার সর্বোত্তম উপায় হ'ল ম্যাক ঠিকানাটি পাঠানো যা এনআইসি আইডি।

আপনি এই পোস্টটি একবার দেখে নিতে পারেন: আমি কীভাবে পিএইচপি-তে কোনও সংযুক্ত ক্লায়েন্টের ম্যাক এবং আইপি ঠিকানা পেতে পারি?


দুঃখিত, তবে এনআইসির আইডি সহজ ধোঁকাবাজ। এটি অবশ্যই সেরা উপায় নয়।
asgs

@ এসএসএস ব্রাউজারের আঙুলের ছাপাই আরও ভাল হতে পারে, বা আপনার মতে সবচেয়ে ভাল উপায় কী হবে?
মেহেদী করামসলি

কোনও সেরা উপায় নেই, এটি এটি সম্পর্কে দুঃখজনক অংশ। তবে, বাবা এবং উপরের যে সম্ভাব্যতা অধ্যয়নটি উপস্থাপন করেছেন তার সাথে মিলিয়ে ব্রাউজার ফিঙ্গারপ্রিন্ট করা আমার মতে সেরা হবে।
27 এ জিজ্ঞাসা করুন

1

আপনি এটি ট্যাগ সহ এটি করতে পারেন। যদিও আমি নিশ্চিত নই যে এই আইনী একগুচ্ছ মামলা দায়ের করা হয়েছে কিনা।

আপনি যদি আপনার ব্যবহারকারীদের যথাযথভাবে সতর্ক করেন বা আপনার কাছে ইন্ট্রানেট ওয়েবসাইটের মতো কিছু থাকে তবে এটি ঠিক আছে।


ইটাগগুলি ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয়।
স্ল্যাশ 197

1
এটাগগুলি HTTP / 1.1 টি অনুচ্ছেদের অংশ। সমস্ত জনপ্রিয় ব্রাউজারগুলি ইটাগগুলিকে সমর্থন করে, আপনাকে ইট্যাগ / ইফ-না-ম্যাচ শিরোনামগুলি সমর্থন না করার জন্য আপনার নিজের ব্রাউজারটি লিখতে হবে।
ব্রায়ান ম্যাকগিনিটি

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

এখন আমি বুঝতে পারছি আপনি কী বলছিলেন। তুমি ঠিক বলছো. প্রতিটি ব্রাউজারের নিজস্ব ক্যাশে স্টোর রয়েছে, অতএব পৃথক ইটাগ।
ব্রায়ান ম্যাকগিনিটি

1

আপনি সম্ভবত কোনও ডিভাইস শনাক্তকারী সংরক্ষণ করার জন্য একটি ব্লব তৈরি করতে পারেন ...

ক্ষতিটি হ'ল ব্যবহারকারীকে ব্লবটি ডাউনলোড করতে হবে ( আপনি ডাউনলোডটি জোর করতে পারেন ), কারণ ব্রাউজারটি সরাসরি ফাইল সংরক্ষণ করতে ফাইল সিস্টেম অ্যাক্সেস করতে পারে না।

রেফারেন্স:

https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs


0

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

এটি কুকি এবং লোকাল স্টোরেজের প্রয়োজনীয়তা সরিয়ে দেয়।


0

আমি বিশ্বাস করতে পারি না, http://browserpy.dk এখনও এখানে উল্লেখ করা হয়নি! সাইটটি অনেকগুলি বৈশিষ্ট্য (প্যাটার্ন স্বীকৃতি হিসাবে) বর্ণনা করে যা শ্রেণিবদ্ধ তৈরি করতে ব্যবহৃত হতে পারে।

এবং কারণগুলির জন্য, বৈশিষ্ট্যগুলি মূল্যায়নের জন্য আমি বিশেষত সাপোর্ট ভেক্টর মেশিনগুলি এবং libsvm এর পরামর্শ দেব ।


0

একটি সেশনের সময় বা সেশন জুড়ে সেগুলি ট্র্যাক করবেন?

আপনার সাইটটি সর্বত্র এইচটিটিপিএস থাকলে আপনি ব্যবহারকারীর সেশনটি ট্র্যাক করতে টিএলএস সেশন আইডি ব্যবহার করতে পারেন


1
প্রশ্ন এখানে কিভাবে?
ব্যবহারকারী 455318

-2
  1. ক্রস-প্ল্যাটফর্মের ডামি (এনএসপিআই) প্লাগইন তৈরি করুন এবং ব্যবহারকারী যখন ডাউনলোড করে (উদাহরণস্বরূপ লগইন করার পরে) তখন প্লাগইন নাম বা সংস্করণটির জন্য একটি অনন্য নাম তৈরি করুন।
  2. প্লাগইনটির জন্য একটি ইনস্টলার সরবরাহ করুন / নীতি প্রতি এটি ইনস্টল করুন

এটি ব্যবহারকারীর স্বেচ্ছায় শনাক্তকারী ইনস্টল করা প্রয়োজন।

একবার প্লাগইন ইনস্টল হয়ে গেলে, যে কোনও (প্লাগইন সক্ষম) ব্রাউজারের আঙুলের ছাপে এই নির্দিষ্ট প্লাগইনটি থাকবে। সার্ভারে তথ্য ফিরিয়ে আনতে ক্লায়েন্ট-সাইডে কার্যকরভাবে প্লাগইন সনাক্ত করতে একটি অ্যালগরিদম প্রয়োজন, অন্যথায় আইই এবং ফায়ারফক্স> = ২৮ ব্যবহারকারীদের সম্ভাব্য বৈধ সনাক্তকরণের একটি টেবিলের প্রয়োজন হবে।

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

যে ব্যবহারকারীরা সনাক্ত করতে চান না (বা তাদের মেশিনগুলি) সর্বদা এটি প্রতিরোধের জন্য কোনও উপায় খুঁজে পাবেন।


হাইফ্লো স্ট্যাক ওভারফ্লো দয়া করে নোট করুন; this will require the user to willingly install the identifier.আসল পোস্টার (ওপি) এর অর্থ সম্ভবত এটি নয়।
স্টিফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.