সেশন ভেরিয়েবলগুলি এড়ানো উচিত?


36

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

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

আমার সহকর্মী সেগুলি ব্যবহার না করার কয়েকটি কারণ রয়েছে:

  • সেশন ভেরিয়েবলগুলির শিরোনামহীন প্রকৃতি
  • সেশনের সময়-আউট রাষ্ট্রের ক্ষতির কারণ
  • সেশন ভেরিয়েবলগুলির গ্লোবাল স্কোপ প্রকৃতি
  • ভারসাম্যপূর্ণ সার্ভারগুলি লোড করে সেশনগুলি (। নেট নির্দিষ্ট?)
  • অ্যাপ্লিকেশন পুল / সার্ভার পুনরায় চালু হচ্ছে
  • এগুলি অপ্রয়োজনীয়

3
using things like query string parameters instead- এটির একটি ক্ষেত্রে, যদি সম্ভব হয় সবসময় ক্যোরি স্ট্রিং প্যারামিটার ব্যবহার করুন use এই জাতীয় প্যারামিটারের জন্য সেশন ব্যবহার করা ভঙ্গুর এবং যখন ব্যবহারকারীদের একাধিক ট্যাব খোলা থাকে তখন অদ্ভুত বাগগুলি প্রবর্তন করতে পারে।
ইজকাটা

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

2
@ গ্র্যান্ডমাস্টার বি আহেম হয় না তারা জানে না তারা কী করছে বা তাদের কেরিয়ারের সময়কালে এই বুলেট পয়েন্টগুলির প্রত্যেকটি দ্বারা পুড়িয়ে ফেলা হয়েছে (আমি নিজে তাদের মধ্যে প্রায় 4 টি আঘাত করেছি) এবং অস্থায়ী অবস্থার সাথে মোকাবিলা করার আরও উপযুক্ত উপায়গুলি জানেন।
এড জেমস

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

উত্তর:


41

আপনার অ্যাপ্লিকেশনটিতে যদি একটি সেশন ভেরিয়েবল থাকে তবে নিজেকে এটি জিজ্ঞাসা করুন:

আমি যখন আমার ব্রাউজারের পিছনের বোতামটি ক্লিক করি, তখন আমার ভেরিয়েবলের কী মান চাই?

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

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

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


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

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

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

25

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

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

নিম্নলিখিত বিষয়গুলি বাস্তবায়নের জন্য নির্দিষ্ট:

সেশন ভেরিয়েবলগুলির শিরোনামহীন প্রকৃতি

সেশন ভেরিয়েবলগুলির গ্লোবাল স্কোপ প্রকৃতি

ভারসাম্য হারিয়ে সার্ভারগুলি সেশন হারিয়েছে

অ্যাপ্লিকেশন পুল / সার্ভার পুনরায় চালু হচ্ছে

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

এটি আরও আকর্ষণীয়:

সেশনের সময়-আউট রাষ্ট্রের ক্ষতির কারণ

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

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


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

আপনি সেশনের উদ্দেশ্যে উদ্দেশ্যে কিছু উদাহরণ দিতে পারেন?
Tjart

@ জাজার্ট: আমি শেষ অনুচ্ছেদটিকে কিছুটা প্রসারিত করেছি। আশা করি এইটি কাজ করবে.
ম্যাট এস

14

অন্যরা ভাল পয়েন্ট (যা আমি পুনরাবৃত্তি এড়ান হবে) অনেক করেছেন, কিন্তু যা এখনও আলোচনা করা হয়েছে আপনার বন্ধুর কৌশল এক দিক: নিরাপত্তা

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

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

আপনি যখন সেশনগুলি ব্যবহার করেন তখন এগুলি এখনও ঘটতে পারে তবে আপনার বন্ধু যদি না জানে তবে সেগুলি অনেক সহজ হয়ে উঠতে পারে ।


2

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

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

আমরা যখন কোনও উপায়ে প্রোগ্রামিং করি তখন কি আমরা তা করি না?


1

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

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

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


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

আমি নিশ্চিত নই, আমি যা পোস্ট করেছি তা আমার নিজের স্বীকৃত সীমিত অভিজ্ঞতার ভিত্তিতে পিএইচপি / মাইএসকিউএলে একটি ডেটাবেস চালিত ওয়েব অ্যাপ তৈরির ভিত্তিতে তৈরি হয়েছিল। ব্রাউজারগুলিতে একাধিক ট্যাবগুলি কীভাবে হ্যান্ডেল করা হয় (আমি ধরে নিচ্ছি যা আপনি উল্লেখ করছেন)?
primehunter326

@ primehunter326 রুট প্যারাম বা কোয়েরি স্ট্রিং বা লুকানো ফর্ম ক্ষেত্র সহ।
কেসি

0

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

সেশন ভেরিয়েবল ব্যতীত কোনও ওয়েবসাইট ডিজাইন করা সম্ভব তবে এটি আরও শক্ত। সবচেয়ে শক্ত (আইএমএইচও) হ'ল অভিনব লগইন / লগআউট, এইচটিটিপি প্রমাণীকরণের স্কিমগুলি এইচটিএমএল ফর্মের মাধ্যমে প্রমাণীকরণের জন্য প্রয়োজনীয় সরঞ্জাম সরবরাহ করে না (আপনি জাভাস্ক্রিপ্টের সাহায্যে কিছু হ্যাক করতে পারেন - এক্সএইচআর থেকে https: // আনটেল: Passowrd@mydomain.com ) এবং লগআউট করা এবং ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ হওয়া আরও শক্ত। সে সম্পর্কে W3 মেলিং তালিকাগুলি নিয়ে কিছু আলোচনা হয়েছিল তবে আমি যদি সঠিকভাবে মনে করি তবে এই ধারণাটি বাদ দেওয়া হয়েছিল।

বিশ্রামের জন্য, আপনার সেশন ভেরিয়েবলগুলি ছাড়া বাঁচতে পারা উচিত। আপনার একটি ডাটাবেস, ফাইল বা অন্য কোথাও কিছু স্টেট থাকবে তবে সেশন ভেরিয়েবলের ব্যবহার বিরল হওয়া উচিত।

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

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