এক্সপ্রেস.জেজে নোড.জেএস সহ সেশনগুলি কীভাবে কাজ করবে?


96

এক্সপ্রেস.জেএস ব্যবহার করে , সেশনগুলি মৃত সহজ। আমি কৌতূহলী তারা কীভাবে বাস্তবে কাজ করে।

এটি ক্লায়েন্টে কিছু কুকি সঞ্চয় করে? যদি তা হয় তবে আমি সেই কুকিটি কোথায় পাব? প্রয়োজনে আমি কীভাবে এটি ডিকোড করব?

আমি মূলত দেখতে চাই যে কোনও ব্যবহারকারী লগইন হয়েছে কিনা, এমনকি ব্যবহারকারী যখন সেই সময়ে সাইটে আসলে না থাকে (যেমন ফেসবুক কীভাবে জানতে পারে যে আপনি যখন অন্য সাইটে থাকবেন তখন আপনি লগইন করেছেন)। তবে আমি বুঝতে পারি যে সেশনগুলি কীভাবে কাজ করে তা আমার প্রথমে বুঝতে হবে।

উত্তর:


43

আমি এক্সপ্রেস.জেএস কখনও ব্যবহার করি নি, যদিও বিষয়টিতে তাদের ডকুমেন্টেশন অনুসারে এটি শোনাচ্ছে:

  • কুকি ক্লায়েন্টে সংরক্ষণ করা হয়, একটি কী (যা সার্ভারটি সেশন ডেটা পুনরুদ্ধার করতে ব্যবহার করবে) এবং একটি হ্যাশ (যা সার্ভারটি কুকির ডেটাতে কোনওভাবে ছন্দবদ্ধ হয়নি তা নিশ্চিত করার জন্য ব্যবহার করবে, তাই যদি আপনি চেষ্টা করেন এবং পরিবর্তন করেন তবে কুকিটি অবৈধ হবে একটি মান)

  • কিছু ফ্রেমওয়ার্কের বিপরীতে সেশন ডেটা (যেমন প্লে ফ্রেমওয়ার্ক !) সার্ভারে রাখা হয়, তাই কুকি আসল সেশনের ডেটাধারীর চেয়ে অধিবেশনটির স্থানধারকের মতো।

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

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


167

ওভারভিউ

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

বিশদ

এক্সপ্রেস.জেএস / কানেক্ট এটি ব্যবহার করে একটি 24-বর্ণের বেস 64 স্ট্রিং তৈরি করে utils.uid(24)এবং এতে সঞ্চয় করে req.sessionID। এই স্ট্রিংটি তখন কুকিতে মান হিসাবে ব্যবহৃত হয়।

মক্কেলের পক্ষে

স্বাক্ষরিত কুকিজ সর্বদা সেশনের জন্য ব্যবহৃত হয়, তাই কুকির মানটি নিম্নলিখিত ফর্ম্যাটটিতে থাকবে।

[sid].[signature]

যেখানে [এসআইডি] সেশনআইডি এবং সেশন মিডওয়্যারটি শুরু করার সময় প্রদত্ত গোপন কীটি ব্যবহার করে স্বাক্ষর করে [এসআইডি] তৈরি করে [স্বাক্ষর] উত্পন্ন হয়। হস্তক্ষেপ রোধ করতে স্বাক্ষরকারী পদক্ষেপটি করা হয়েছে। এটি [sid] সংশোধন এবং তারপরে ব্যবহৃত গোপন কীটি না জেনে [স্বাক্ষর] পুনরায় তৈরি করার জন্য গণনামূলকভাবে অক্ষম হতে হবে। সেশন কুকি এখনও চুরি এবং পুনরায় ব্যবহারের জন্য ঝুঁকিপূর্ণ, যদি [এসড] এর কোনও সংশোধন প্রয়োজন হয় না।

এই কুকির নাম

connect.sid

সার্ভার সাইড

একটি হ্যান্ডলার পরে হয় তাহলে cookieParserএবং sessionমিডলওয়্যার এটা পরিবর্তনশীল অ্যাক্সেস থাকবে req.cookies। এটিতে একটি জেএসওএন অবজেক্ট রয়েছে যার কীগুলি হ'ল কুকি কী এবং মানগুলি কুকি মান। এটিতে একটি কী যুক্ত থাকবে connect.sidএবং এর মান সই করা সেশন শনাক্তকারী হবে।

এখানে এমন কোনও রুট সেট আপ করার একটি উদাহরণ রয়েছে যা প্রতিটি অনুরোধে সেশন কুকির অস্তিত্বের জন্য যাচাই করবে এবং কনসোলটিতে এর মানটি মুদ্রণ করবে।

app.get("/*", function(req, res, next) {

    if(typeof req.cookies['connect.sid'] !== 'undefined') {
        console.log(req.cookies['connect.sid']);
    }

    next(); // Call the next middleware
});

আপনার কনফিগার বিভাগের app.use(app.router)পরে cookieParserএবং রাউটারটি ( ) অন্তর্ভুক্ত রয়েছে তাও আপনাকে নিশ্চিত করতে হবে session

নিম্নলিখিতটি এক্সপ্রেস.জেএস / কানেক্ট দ্বারা অভ্যন্তরীণভাবে সঞ্চিত ডেটার উদাহরণ।

{
  "lastAccess": 1343846924959,
  "cookie": {
    "originalMaxAge": 172800000,
    "expires": "2012-08-03T18:48:45.144Z",
    "httpOnly": true,
    "path": "/"
  },
  "user": { 
    "name":"waylon",
    "status":"pro"
  }
}

userক্ষেত্র কাস্টম হয়। বাকি সবই সেশন ম্যানেজমেন্টের অংশ।

উদাহরণটি এক্সপ্রেস 2.5 এর।


4
কনসোল.লগ দিয়ে কুকি মান প্রিন্ট করার সময় এটি এনকোডযুক্ত (স্বাক্ষরিত) কুকি দেয়। আমি কীভাবে আসল তথ্য পাব?
vsync

আপনি কী বলতে চাইছেন - "সেশন কুকি এখনও চুরি এবং পুনরায় ব্যবহারের পক্ষে ঝুঁকিপূর্ণ, যদি [এসআইডি] এর কোনও পরিবর্তন প্রয়োজন হয় না।" যেহেতু এসআইডি এক্সপ্রেসের মাধ্যমে উত্পন্ন হয়, তাই আমরা কখনই এটি সঠিকভাবে পরিবর্তন করতে পারি না?
হৃশিকেশ

4
: @WebHrushi আমি একজন মানুষ-ইন--মধ্য আক্রমণের চিন্তা ছিল en.wikipedia.org/wiki/Man-in-the-middle_attack
Waylon Flinn

ক্যান কেউ এই আমাকে প্রশ্ন দিয়ে সাহায্য কর! Stackoverflow.com/questions/21982791/...
roundrobin

আমি কীভাবে কোনও বিশেষ সেশন_আইডির জন্য একটি টোকেন তৈরি করব ??
আমান ভার্মা

9

আমি কৌতূহলী তারা কিভাবে বাস্তবে কাজ করে।

এই উত্তর এবং উইকি স্টাফ দেখার চেষ্টা করুন ।

এটি ক্লায়েন্টে কিছু কুকি সঞ্চয় করে?

হ্যাঁ, এটি সাধারণত নির্ধারিত সেশন আইডি সহ একটি কুকি, যা জালিয়াতি প্রতিরোধ করার জন্য কোনও গোপন সহ স্বাক্ষর করা উচিত।

যদি তা হয় তবে আমি সেই কুকিটি কোথায় পাব? প্রয়োজনে আমি কীভাবে এটি ডিকোড করব?

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


স্যার, আমরা কি কথা বলতে পারি এসব নিয়ে আমার কিছু সন্দেহ আছে।
সুরজ জৈন

1

ইতিমধ্যে দুর্দান্ত উত্তরের সাথে সাথে, এক্সপ্রেস সেশনগুলি, কুকি এবং স্টোরের সাথে তাদের লিঙ্কটি ব্যাখ্যা করতে আমি এখানে তৈরি করেছি 2 টি চিত্র

  • চকোলেট কুকি: চকোলেট
  • স্ট্রবেরি কুকি: স্ট্রবেরি

আমি দুঃখিত তবে আমি ডায়াগ্রাম থেকে বেশ কিছু পাইনি। আপনি এটি দিয়ে / জানাতে কী চেষ্টা করছেন?
রাফায়েল সোফি-জাদা ২২

4
@ রাফেলসফি-জাদা প্রতিটি কুকির একটি অনন্য "স্বাদ" (বা sessionId) থাকে। যখন স্ট্রবেরি কুকি সার্ভারের কাছে উপস্থাপন করা হয় (এইচটিটিপি অনুরোধের সাথে), সার্ভারটি এই স্বাদটি সনাক্ত করে এবং স্টোর থেকে সংশ্লিষ্ট ডেটাগুলি লোড করে: রোসির ডেটাগুলি এবং পপুলেটে req.session!
এনার্নিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.