সাআস অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীর সেশনের সময়সীমা হ্যান্ডলিং - বেশ কয়েকটি পদ্ধতির বিষয়ে আলোচনা করা


11

আমি জানি এটির সদৃশ হিসাবে চিহ্নিত হওয়ার দুর্দান্ত সুযোগ রয়েছে তবে আমি যা খুঁজছি ঠিক তা খুঁজে পেল না

এটি একটি সাধারণ সমস্যা এবং আমি নিশ্চিত এটির কিছু ভাল সংজ্ঞাযুক্ত সেরা অনুশীলন সমাধান রয়েছে

পটভূমি

  1. একটি একক পৃষ্ঠা সাস অ্যাপ্লিকেশনটিতে প্রচুর ড্র্যাগ এবং ড্রপ রয়েছে, ব্যবহারকারী সময়কালের জন্য খুব বেশি সার্ভার যোগাযোগ ছাড়াই এটির সাথে যোগাযোগ করতে পারে

  2. একটি অবিচলিত সেশন কুকি ব্যবহার করে সার্ভার সেশনটি কেবলমাত্র ব্যবহারকারী অবজেক্টকে ধারণ করে

  3. X ঘন্টা পরে সার্ভারে সেশনটির মেয়াদ শেষ হবে

  4. কিছু জিনিস কেবল লগ ইন করার সময় লোড হয়

সমস্যা

  1. ব্যবহারকারী অ্যাপ্লিকেশনটিতে কাজ করে, হয়ে গেলে ব্যবহারকারী লগ আউট করে না, কেবল ব্রাউজারটি খোলা রাখে
  2. ব্যবহারকারী X ঘণ্টারও বেশি সময় পরে ফিরে আসবে (সেশনটিতে সেশনটি অবৈধ)
  3. সার্ভার সংযোগের প্রয়োজন ছাড়াই ব্যবহারকারী অ্যাপ্লিকেশনটির সাথে যোগাযোগ করে (জিনিসগুলি টেনে এনে ফেলে দেয়, পাঠ্য সম্পাদনা ...)
  4. কেবলমাত্র পরবর্তী সার্ভারের মিথস্ক্রিয়াতে (ধরে নেওয়া যাক কোনও অটো সেভ নেই) ব্যবহারকারী লগইন পৃষ্ঠায় ফেলে দেওয়া হয় এবং তাদের কিছু কাজ হারিয়ে ফেলে

সম্ভাব্য সমাধান

আমি মনে মনে কিছু সমাধান এখানে দিচ্ছি, অন্য কোনও আছে কিনা তা শুনতে চাই এবং সেগুলির কোনওর সাথে যদি মূলত কোনও ভুল থাকে wrong

1. ব্যবহারকারীকে কখনও লগ আউট করবেন না

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

2. স্থানীয় স্টোরেজ

  • কিভাবে? লগ আউট হয়ে থাকলে অস্থায়ীভাবে স্টেট স্টোর করতে নতুন স্থানীয় স্টোরেজ ব্যবহার করুন, লগইন পৃষ্ঠায় পুনর্নির্দেশ করুন, একবার লগইন করুন
  • পেশাদাররা : সেশনের সময়সীমা সামাল দেওয়ার জন্য নয়, "ওয়ার্ক অফলাইন" সমর্থনের জন্যও ভিত্তি করে
  • কনস : বাস্তবায়নের পক্ষে আরও শক্ত, ডেটা ট্রিতে রাষ্ট্রীয় সংহতকরণ করা দরকার, সমস্ত ব্রাউজার সমর্থন করে না

3. অটো সেভ

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

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

৪. সেশনটির মেয়াদ শেষ হওয়ার পরে ব্যবহারকারীকে লগ আউট করুন

এটির বেশ কয়েকটি পন্থা থাকতে পারে

  1. সার্ভারকে জিজ্ঞাসা করুন "সেশনটির মেয়াদ শেষ হয়ে গেছে" - এটি 22 / শ্রডঞ্জারের বিড়াল ধরা খুব সামান্য, কারণ সার্ভারের কাছে কেবল প্রশ্নটি অধিবেশন প্রসারিত করে (সময়সীমা পুনরায় আরম্ভ করে),

    • কিভাবে? হয় এমন একটি সার্ভার রয়েছে যা এই জাতীয় প্রশ্নকে সমর্থন করে (আমি কারও সম্পর্কে জানি না, তবে আমি জাভা স্থল রূপে এসেছি) অথবা, কেবলমাত্র সেশন আইডির একটি টেবিল রাখা যেতে পারে, এবং ম্যানুয়ালি শেষ অ্যাক্সেসের সময়টি রাখতে হবে এবং সেশনটি পাস করে সার্ভারকে জিজ্ঞাসা করুন কুকির পরিবর্তে প্যারামিটার হিসাবে আইডি, এটি এমনকি সম্ভব কিনা তাও আমি নিশ্চিত নই, তবে এটি বিপজ্জনক, সুরক্ষিত এবং খারাপ ডিজাইনের যা মনে হয় lo লগিন পৃষ্ঠায়, একবার লগইন করা চালিয়ে যান
    • পেশাদাররা : যদি সার্ভারগুলিতে এ জাতীয় নেটিভ সমর্থন ছিল, একটি পরিষ্কার, বৈধ প্রশ্নের মতো শোনায় (ব্যবহারকারী এক্স এর এখনও একটি সেশন রয়েছে কিনা তা জিজ্ঞাসা করে যদি তা না করে এটি পুনর্নবীকরণ না করে)
    • কনস : সার্ভার যদি এটি সমর্থন না করে (এবং আবারও, কোনও সার্ভার বা কাঠামোর এই কার্যকারিতা রয়েছে কিনা তা আমি জানি না) তবে কর্মক্ষেত্রটির সম্ভাব্যত বিশাল নিরাপত্তা ঝুঁকি রয়েছে।
  2. আমি শুনেছি যে এক জালিয়াতির সার্ভার সাইডে একটি সংক্ষিপ্ত অধিবেশন রয়েছে, এবং একটি ক্লায়েন্ট সাইড পিং রাখুন, এতে সর্বাধিক সংখ্যক পিং রয়েছে

    • কিভাবে? সার্ভারে সংক্ষিপ্ত অধিবেশন, ক্লায়েন্টের প্রতিটি সেশনের পিংস টাইমআউট / ২, ওয়াইয়ের সর্বাধিক পুনরায় চেষ্টা করে has
    • পেশাদাররা : সমস্যাগুলি দ্রুত এবং নোংরা করা ঠিক করা
    • কনস : একটি হ্যাকের মতো মনে হচ্ছে, সার্ভারটিকে এটি করার পরিবর্তে সেশনটি নিজেকে পুনর্নবীকরণের মাধ্যমে পরিচালনা করা
  3. ক্লায়েন্ট সাইড টাইমার

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

    • পেশাদাররা : সমস্যার সমাধান করে

    • কনস : সিঙ্কটি কাজ করে তা নিশ্চিত করার প্রয়োজন ব্যতীত অন্য কোনওটির কথা চিন্তা করতে পারে না

প্রশ্নটি

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


আমি টেস্টিপির সাথে কৌনিক এবং জ্যাঙ্গো ব্যবহার করি সুতরাং সেই দৃষ্টিকোণ থেকে আমার চিন্তাভাবনাগুলি এখানে রয়েছে: ৪.১: আপনার সমস্ত সংস্থার জন্য ব্যবহৃত প্রমাণীকরণ শ্রেণি এখনকার এবং আপনার ব্যবহারকারীর "সর্বশেষ-অ্যাক্সেস" ক্ষেত্রের মানের মধ্যে সময়ের পার্থক্যটি পরীক্ষা করতে এবং তুলনা করতে পারে মডেল. 401 সময় কনফিগার করা সময়সীমার চেয়ে বেশি। 200 অন্যথায় এবং এর সাথে 'শেষ-অ্যাক্সেস' ক্ষেত্রটি আপডেট করুন now। ৪.২ আপনার সার্ভারটি মারার এবং ব্যয় বৃদ্ধির দুর্দান্ত উপায় বলে মনে হচ্ছে 4.3 অ্যান্ড্রয়েডে, হোম স্ক্রিনে ফিরে আসার পরে আমি নিশ্চিত যে প্রক্রিয়াটি বিরতি পেয়েছে এবং এটি আপনার ক্লায়েন্টের টাইমারকে হস্তক্ষেপ করতে পারে।
এয়ারটোনিক্স

উত্তর:


5

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

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

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


2

আমি শুনেছি যে এক কার্যক্রমে সার্ভার সাইডে একটি সংক্ষিপ্ত অধিবেশন রয়েছে এবং একটি সংরক্ষণ> জীবন্ত ক্লায়েন্ট সাইড পিং রয়েছে যার সর্বাধিক সংখ্যক সংখ্যা রয়েছে

কিভাবে? সার্ভারে সংক্ষিপ্ত অধিবেশন, ক্লায়েন্ট প্রতিটি সেশনটাইম / 2 এর পিংস দেয়, ওয়াইয়ের সর্বাধিক> পুনরায় চেষ্টা করুন

এটি আমার মতে সেরা সমাধান। কেন আপনি এটিকে "নোংরা হ্যাক" মনে করেন?

এটি ঠিক কী করতে হবে তা তৈরি করে। ব্যবহারকারী প্রোগ্রামটির সাথে কাজ করার সময় সেশনটি খোলা থাকবে।

ব্যবহারকারী প্রোগ্রামটি নিয়ে কাজ বন্ধ করার পরে, সেশনটি বন্ধ হয়ে যাবে।

কার্যকর করা যথেষ্ট সহজ।

ঠিক কী দরকার তা যদি আমি সঠিকভাবে প্রশ্নটি বুঝতে পারি।


কখনও কখনও নোংরা হ্যাক্স সেরা সমাধান :) ধন্যবাদ। আপনি প্রশ্নটি পুরোপুরি ঠিক বুঝতে পেরেছিলেন
ইরান মেডান

2

আমি আসলে একটি অ্যাপ্লিকেশন তৈরি করছি যা এটির সাথে ডিল করে।

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

জ্যাঙ্গো অ্যাপ্লিকেশনটিতে কেবলমাত্র একটি টেম্পলেট ভিউ urlconf রয়েছে যা বেস html লোড করে যা ...

ক্লায়েন্টের পাশে আমি কৌণিক ব্যবহার করে একটি অ্যাপ্লিকেশন তৈরি করেছি।

প্রমাণীকরণ যতদূর যায়, সেখানে একটি http-auth- ইন্টারসেপ্টার রয়েছে যা 401 টি প্রতিক্রিয়া শুনে।

যখন 401 পুনরুদ্ধার করা হয় এটি বহির্গামী অনুরোধটি বাফার করে এবং একটি ইভেন্ট "লগইন-প্রয়োজনীয়" বন্ধ করে দেয়। এটি বেশ কয়েকবার ঘটতে পারে।

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

সমস্ত বাফার অনুরোধগুলি যা এর আগে 401 টি প্রতিক্রিয়া তৈরি করেছিল এখন অনুমোদনের HTTP শিরোনামে অন্তর্ভুক্ত APIKEY দিয়ে পুনরায় খেলানো হয়েছে।

লোকালস্টোরেজ জসন ডেটা পরিচালনা করার জন্য আমি অন্য কৌণিক পরিষেবা / কারখানা ব্যবহার করি এবং আমি এখানে ইউজারনেম এবং এপিকেই সঞ্চয় করি।

ধাঁধাটির একমাত্র টুকরোটি সমাধান করতে বাকি রইল যে কীভাবে সেই তথ্য সুরক্ষিত করা যায় এবং কীভাবে সেই তথ্যের সময়সীমা কার্যকর করা যায়।

সম্ভবত শেষ বৈধ http অনুরোধ থেকে একটি টাইমস্ট্যাম্প চেক ব্যবহার করুন।


এর ফলোআপ হিসাবে, আমি প্রতিটি টেস্টিপি প্রমাণীকরণ যাচাইয়ের জন্য নিম্নলিখিত তুলনা করা বিবেচনা করেছি: বর্তমান_কালীন> ব্যবহারকারীর_প্লিন_টাইম + সেটিংস.সেসিশন_আম.আউট। যদি সত্য হয় তবে 401 ফেরত দিন। প্রতিটি বৈধ প্রমাণীকরণ ব্যবহারকারীর তালিকাগুলি_কালকে বর্তমান_টাইমে আপডেট করে।
এয়ারটোনিক্স

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

1

আমার ক্ষেত্রে, আমি ৪.১ এর মতো কিছু ব্যবহার করছি। ব্যবহারকারী খুব লাইটওয়েট কৌণিক চালিত AJAX json অনুরোধে লগ-ইন করার পরে সার্ভারের বিরুদ্ধে সেট বিরতিতে REST এপিআই-তে ঘটে। সুরক্ষা প্রয়োজনীয়তার কারণে, মালিকানাধীন ইউআই প্রত্যাশা করে যে সার্ভারটি ব্যবহারকারীর জন্য একটি সেশন বজায় রাখবে যা সার্ভারের পাশের কিছু সুরক্ষিত তথ্য, টেম্পলেট, ডেটা ইত্যাদি সঞ্চয় করে। এটি এখনও সুরক্ষার দৃষ্টিকোণ থেকে আমার পছন্দের পদ্ধতি। সংবেদনশীল ডেটা নিয়ে কাজ করার সময় (কেবল পাসওয়ার্ডগুলি এবং এই জাতীয় পাসওয়ার্ড নয়) আইএমও এটি স্থানীয় ক্লায়েন্টে ক্লায়েন্টের পাশে সংরক্ষণ করে ইত্যাদি সার্ভারের পার্শ্বের চেয়েও বেশি ঝুঁকি তৈরি করে (আমি নিশ্চিত কেউ আমার সাথে বিতর্ক করবে)। তৃতীয় পক্ষগুলি সিস্টেমের সাথে যোগাযোগ করার সময় একই API ব্যবহার করে তবে প্রতিটি অনুরোধে প্রমাণীকরণের শংসাপত্রগুলি অবশ্যই প্রেরণ করতে হবে।

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

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

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

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

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