সেশন কি? তারা কিভাবে কাজ করে?


332

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

উদাহরণস্বরূপ - আমি username='rasmus'এবং ব্যবহার করে লগইন করি password='default'। এই জাতীয় ক্ষেত্রে ডেটা সার্ভারে পোস্ট করা হবে যা প্রমাণিত হলে আমাকে চেক এবং লগ ইন করার কথা। তবে পুরো প্রক্রিয়া চলাকালীন সার্ভারটি একটি সেশন আইডিও উত্পন্ন করে যা আমার ব্রাউজারে একটি কুকিতে সংরক্ষণ করা হবে। এখন সার্ভারও এই ফাইল সেশন বা ডেটাস্টোরে এই সেশন আইডি সঞ্চয় করে।

তবে কেবল সেশন আইডির উপর ভিত্তি করে, সাইটটির মাধ্যমে আমার পরবর্তী ট্র্যাভ্যাসালের সময় এটি কীভাবে আমার ব্যবহারকারীর নাম জানতে সক্ষম হবে? এটি একটি অভি যেখানে চাবি একটি সেশন আইডি এবং মতো বিশদ বিবরণ হবে যেমন সার্ভার ডেটা জমা দেয় username, emailইত্যাদি মান হতে পারে?

আমি এখানে বেশ বিভ্রান্ত হয়ে পড়ছি। সাহায্য দরকার.


9
"এটি কী সার্ভারে ডিক হিসাবে ডেটা সঞ্চয় করে যেখানে কীটি একটি সেশন আইডি এবং ব্যবহারকারীর নাম, ইমেল ইত্যাদির বিবরণগুলির মান হতে পারে?" ...হ্যাঁ. 'ডিক' একটি রিলেশনাল ডাটাবেস হতে পারে তবে মূলত এটি কীভাবে কাজ করে।
বোবিনস

14
আমি ওয়েব সেশনগুলিও বুঝতে চেয়েছিলাম, এখন আমি বুঝতে পারি। আমি আমার নিজের উইকি লেখার শেষ পর্যন্ত যদি কোনো সাহায্যের আছে: machinesaredigging.com/2013/10/29/how-does-a-web-session-work
eloone

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

1
আমি প্রোটোকল স্তরের বিশদ ব্যবহার করে নিজের লিখিত লিখেছি - বিটসপিডিয়া ডটকম
আসিফ শাহজাদ

উত্তর:


400

যেহেতু এইচটিটিপি রাষ্ট্রবিহীন, অন্য কোনও অনুরোধের সাথে কোনও অনুরোধকে যুক্ত করতে, আপনাকে এইচটিটিপি অনুরোধের মধ্যে ব্যবহারকারীর ডেটা সংরক্ষণ করার একটি উপায় প্রয়োজন।

কুকিজ বা ইউআরএল প্যারামিটার (যেমন উদাহরণস্বরূপ http://example.com/myPage?asd=lol&boo=no ) 2 বা ততোধিক অনুরোধের মধ্যে ডেটা পরিবহণের উভয়ই উপযুক্ত উপায়। তবে ক্লায়েন্টের পক্ষে আপনি সেই তথ্যটি পঠনযোগ্য / সম্পাদনাযোগ্য হতে চান না সে ক্ষেত্রে সেগুলি ভাল নয়।

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

অবশ্যই অন্যান্য দিক বিবেচনা করার আছে, যেমন আপনি চান না যে লোকেরা অন্যের সেশন হাইজ্যাক করে, আপনি চান যে সেশনগুলি চিরকাল স্থায়ী হয় না, বরং মেয়াদ শেষ হয়ে যায়, ইত্যাদি।

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


3
"আপনি চান না যে ডেটা ক্লায়েন্টের পাশে বজায় রাখা হোক"। কেন না? আপনি যদি দৃ strong় ক্রিপ্টোগ্রাফি নিয়োগ করেন তবে ক্লায়েন্টকে সেশন ডেটা এনক্রিপ্ট করা এবং একটি কুকিতে সংরক্ষণ করতে দিতে পারেন। এটি সার্ভারগুলিকে কিছু মনে রাখার দরকার নেই বলে একাধিক নোডের স্কেলিংকে ব্যাপকভাবে সরল করে।
ম্যাট হ্যারিসন

5
@ ম্যাটহারিসন সার্ভার-সাইডটি "কিছু মনে না রেখে" কীভাবে ডেটা ডিক্রিপ্ট করবেন? আমি আমার উত্তরে এই বিষয়টিকে প্রসারিত করার চেষ্টা করেছি।
লুক 404

2
@ ম্যাটহারিসন মনে রাখবেন যে প্রচুর ডেটা ব্যবহারকারীর সাইড সংরক্ষণ করা আপনার ট্রাফিক বাড়িয়ে তুলবে।
নিতাসাস

5
যদি কোনও তৃতীয় পক্ষ ব্যবহারকারীর সেশন কীটি আটকাতে পারে তবে তারা ব্যবহারকারী হিসাবে কাজ করতে সক্ষম হবে না? সাইটটি এইচটিটিপিএস ব্যবহার করে না বলে ধরে নেওয়া, মনে হচ্ছে কোনও তৃতীয় পক্ষ কী এনক্রিপ্ট হওয়া সত্ত্বেও সেশন কী ব্যবহারকারীরূপে ব্যবহারকারী হিসাবে মাস্ক্রেড করতে পারে। সার্ভারটি কেবল এটি ডিক্রিপ্ট করবে।
ব্যবহারকারী 137717

2
@ ব্যবহারকারী 137717 হ্যাঁ এটি যদি আপনি আক্ষরিক অর্থে "সঠিক সেশন আইডি উপস্থাপন করে এমন প্রত্যেককে" সেশনে অ্যাক্সেসের অনুমতি দেন তবে এটি সম্ভবত একটি সম্ভাবনা। আপনি কয়েকটি স্থানে বিধিনিষেধ প্রয়োগ করতে পারেন, সেশনটিতে ক্লায়েন্টের আইপি সংরক্ষণ করা সবচেয়ে সহজ এবং সাধারণ একটি: যদি অন্য আইপি থেকে কোনও ক্লায়েন্ট একই সেশন আইডি উপস্থাপন করেন তবে আপনি এটি নকল হিসাবে চিহ্নিত করে সেশনটি মুছুন।
লুক 404

110

সাদৃশ্য দ্বারা সহজ ব্যাখ্যা

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

এই ব্যাংকটি একটি মজার ধরণের ব্যাঙ্ক - যুক্তি দেখানোর জন্য বিষয়গুলি এখানে কীভাবে কাজ করে তা এখানে:

  1. আপনি লাইনে অপেক্ষা করতে পারেন (বা অন-লাইনে) এবং আপনি টেলারের সাথে কথা বলেন: আপনি টাকা তুলতে অনুরোধ করেন এবং তারপরে
  2. আপনাকে সোফায় কিছুক্ষণ অপেক্ষা করতে হবে, এবং 20 মিনিট পরে
  3. আপনাকে যেতে হবে এবং প্রকৃতপক্ষে টেলারের কাছ থেকে আপনার অর্থ সংগ্রহ করতে হবে।

তবে কীভাবে আপনাকে বলবেন যে সবার থেকে আলাদা?

টেলর আপনাকে দেখতে বা সহজেই চিনতে পারে না, মনে রাখবেন, কারণ লাইটগুলি সব শেষ। যদি আপনার কথক আপনার 10,000 ডলার প্রত্যাহার অন্য কারও কাছে দেয় - ভুল ব্যক্তি ?! টেলর আপনাকে যে প্রত্যাহার করেছে সে হিসাবে আপনাকে চিনতে পারে এটি একেবারে গুরুত্বপূর্ণ, যাতে আপনি যে অর্থ (বা সংস্থান) চেয়েছিলেন তা পেতে পারেন।

সমাধান:

আপনি যখন প্রথমে কথকটির কাছে উপস্থিত হন, তিনি বা সে আপনাকে গোপনে কিছু বলে:

"যখনই আপনি আমার সাথে কথা বলছেন," দ্য কথক বলেছেন, "আপনার প্রথমে নিজেকে নিজেকে GNASHEU329 হিসাবে চিহ্নিত করা উচিত - এইভাবে আমি জানি যে এটি আপনি"।

গোপন পাসকোড আর কেউ জানে না।

আমি কীভাবে নগদ প্রত্যাহার করেছি তার উদাহরণ:

সুতরাং আমি 20 মিনিটের জন্য যেতে এবং শীতল করার সিদ্ধান্ত নিয়েছি এবং তারপরে আমি এই টেলারের কাছে গিয়ে বলি "আমি আমার প্রত্যাহার সংগ্রহ করতে চাই"

আমাকে আমাকে জিজ্ঞাসা করলেন: "আপনি কে ??"

"এটা আমি, মিঃ জর্জ ব্যাংকস!"

"প্রমান কর!"

এবং তারপরে আমি তাদের আমার পাসকোডটি বলি: GNASHEU329

"অবশ্যই মিঃ ব্যাংকস!"

এটি মূলত একটি সেশন কীভাবে কাজ করে তা। এটি লক্ষ লক্ষ মানুষের সমুদ্রের মধ্যে একটি অনন্যরূপে চিহ্নিত করার অনুমতি দেয়। প্রতিবার আপনি যখন টেলারের সাথে লেনদেন করেন তখন নিজেকে সনাক্ত করতে হবে।

যদি আপনার কোনও প্রশ্ন থাকে বা আপনি অস্পষ্ট হন - দয়া করে মন্তব্য পোস্ট করুন এবং আমি এটি আপনার জন্য পরিষ্কার করার চেষ্টা করব।

ছবির মাধ্যমে ব্যাখ্যা:

সেশনগুলি ছবির মাধ্যমে ব্যাখ্যা করা হয়েছে


9
এই ব্যাখ্যাটি পছন্দ করুন - আপনার উপমা অনুসারে, আপনি কীভাবে অন্যান্য পিপিএলকে শোনার হাত থেকে বাঁচাতে পারবেন এবং গোপনীয় পাসকোড শুনে যে কথাটি বলছেন তা শুনবেন? অন্য কথায়, যদি সেশন_ইডটি চুরি হয়ে যায়, তবে কারও পক্ষে আপনার শংসাপত্রগুলি নকল করা সম্ভব হবে না?
wmock

@ wmock সেশন হাইজ্যাকিং অবশ্যই একটি সমস্যা: এটি পরীক্ষা করে দেখুন! owasp.org/index.php/ অধিবেশন_হিজাকিং_ট্যাক
বিকেএসপুরজান

2
মনোরম উদাহরণ !! এটি শিখার জন্য আগ্রহী মনের সাথে ভাগ করা হবে!
ভিক্টর

আপনার উপমা অনুসারে, GNASHEU329ব্যবহারকারীর পাসওয়ার্ডটি এমন একটি টুথেন উত্পন্ন করে যা নির্দিষ্ট সময় পর্যন্ত শেষ হয়; মিঃ ব্যাংকগুলি তারপরে বার বার টেলরকে তার পাসওয়ার্ড না দিয়ে বেশ কয়েকটি ধারাবাহিক প্রত্যাহার করতে অথ টোকেন ব্যবহার করতে পারে?
ড্যানিয়েল লিজিক

পছন্দ করুন ধারণাটি বুঝতে! আমি আপনাকে বুদ্ধিমান জবাব দেওয়ার জন্য টোকেন ভিত্তিক কর্মপ্রবাহ সম্পর্কে যথেষ্ট জ্ঞাত নই। সাধারণ নীতিটি হ'ল অনুরোধটি করা ব্যক্তিটি কে সেটিকে কোনওভাবে সনাক্ত করতে সক্ষম হওয়া দরকার।
বি কে এসপুরজন

39

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

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

কিছু সেশন ভেরিয়েবলগুলি HTTP শিরোনাম হিসাবে পাস করা হয় । এগুলি প্রতিটি পৃষ্ঠা ব্রাউজ করার দৃশ্যের পিছনে পিছনে চলে গেছে যাতে তারা ব্রাউজারে প্রদর্শিত না হয় এবং প্রত্যেককে ব্যক্তিগত কিছু বলে দেয়। এর মধ্যে রয়েছে USER_AGENT, বা পৃষ্ঠার জন্য অনুরোধ করা ব্রাউজারের ধরণ, রেফারার বা পৃষ্ঠার সাথে লিঙ্ক করা পৃষ্ঠার অনুরোধ করা হচ্ছে ইত্যাদি Some তবে মানকগুলি বেশ ভালভাবে নথিভুক্ত।

আশা করি এইটি কাজ করবে.


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

রেফারারের অর্থ এখানে কী?
গ্যাব 好人

@ গ্যাব 好人 F রেফারারের অর্থ সাধারণত একটি নির্বিচার স্ট্রিং থাকে যা ক্লায়েন্ট "রেফার" এইচটিটিপি অনুরোধ শিরোনামে প্রেরণ করে। এটা তোলে উচিত যে রিসোর্স, আপনি কি জানেন, বর্তমান সম্পদ ক্লায়েন্ট উল্লেখ URL টি ধারণ করে।
লুক 404

ধন্যবাদ, এটি করা উচিত , তাই অগত্যা। সুতরাং আমি মনে করি লোকেরা প্রায়শই আরএফসির পরামর্শের চেয়ে বিভিন্ন শব্দার্থক দিয়ে এই শিরোনামটি ব্যবহার করে, তাই না?
গ্যাব 好人 好人

আগে আপনি লিখেছিলেন Like cookies, this usually doesn't get sent in the URL anymoreএবং তারপর Session variables are like cookies - they're name-value pairs sent along with a request for a page। ঠিক কী ঘটে? আপনি পরের বার কোনও অনুরোধ করার সময় এটি পাঠানো হয়?
কেপিএমজি

19

এইচটিটিপি হল স্টেটলেস সংযোগ প্রোটোকল, অর্থাৎ সার্ভারটি বিভিন্ন ব্যবহারকারীর বিভিন্ন সংযোগের মধ্যে পার্থক্য করতে পারে না।

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

এখন প্রতিটি সেশন আইডির জন্য, সার্ভারটি কিছু ডেটা স্ট্রাকচার রাখে, যা তাকে ব্যবহারকারীর জন্য নির্দিষ্ট ডেটা সংরক্ষণ করতে সক্ষম করে, এই ডেটা স্ট্রাকচারটি আপনি বিমূর্তভাবে সেশনটি কল করতে পারেন।


1
আপনি এই বিষয়ে আরও কিছু আলোকপাত করতে পারেন - "এখন প্রতিটি সেশনের আইডির জন্য সার্ভার কিছু ডেটা স্ট্রাকচার রাখে, যা তাকে ব্যবহারকারীর জন্য নির্দিষ্ট ডেটা সংরক্ষণ করতে সক্ষম করে, এই ডেটা স্ট্রাকচারটি আপনি বিমূর্তভাবে সেশন কল করতে পারবেন?" সার্ভারটি কোন নির্দিষ্ট ক্লায়েন্টের তথ্য সঞ্চয় করে?
রিয়েলপিকে

আপনি কি আরও এই বিষয়ে আলোকপাত করতে পারেন - "এখন প্রতিটি সেশনের আইডির জন্য সার্ভার কিছু ডেটা স্ট্রাকচার রাখে, যা তাকে ব্যবহারকারীর জন্য নির্দিষ্ট ডেটা সংরক্ষণ করতে সক্ষম করে, এই ডেটা স্ট্রাকচারটি আপনি বিমূর্তভাবে সেশন কল করতে পারবেন?" সার্ভারটি কোন নির্দিষ্ট ক্লায়েন্টের তথ্য সঞ্চয় করে?
গ্যাব 好人

উপরের মত একই প্রশ্ন, আপনি প্রতিক্রিয়া জানালে এটি সহায়ক হবে।
সুরজ জৈন

4

এইচটিটিপি কে এমন এক ব্যক্তি (এ) হিসাবে মনে করুন যার সংক্ষিপ্ত স্মৃতি হ্রাস পেয়েছে এবং সেই ব্যক্তি দৃষ্টিশক্তি ছাড়ার সাথে সাথে প্রত্যেক ব্যক্তিকে ভুলে যায়।

এখন, বিভিন্ন ব্যক্তিদের মনে রাখার জন্য, এ ব্যক্তি সেই ব্যক্তির একটি ছবি নেয় এবং তা রাখে। প্রতিটি ব্যক্তির ছবিতে একটি আইডি নম্বর থাকে। That ব্যক্তিটি আবার দেখাতে এলে, সেই ব্যক্তি এটির আইডি নম্বরটি এটিকে বলে এবং A তাদের আইডি নম্বর দিয়ে তাদের ছবিটি সন্ধান করে। এবং ভয়েলা !!, এ ব্যক্তি কে সে জানে।

একই সঙ্গে এইচটিটিপি আছে। এটি শর্ট টার্ম স্মৃতি হারাতে ভুগছে। এটি ওয়েবসাইট ব্যবহার করার সময় আপনি যা কিছু করেছিলেন তা রেকর্ড করার জন্য এটি সেশনগুলি ব্যবহার করে এবং তারপরে, আপনি যখন আবার আসেন, এটি আপনাকে কুকিজের সাহায্যে সনাক্ত করে (কুকি একটি টোকেনের মতো)। ছবিটি এখানে সেশন এবং আইডি হ'ল এখানে কুকি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.